在骨干中获取单个模型,为什么这不起作用?

时间:2014-08-28 20:49:35

标签: javascript backbone.js backbone-model

m是Backbone.Model的子类。我希望m.url()返回' / api / media / sources / 1'但我得到了:

> m.id
1
> m.collection.url
"/api/media/sources"
> m.urlRoot
undefined
> m.url()
"/api/media/sources"

发生了什么?

1 个答案:

答案 0 :(得分:1)

如果您希望将id附加到网址,则应设置urlRoot,而不是url

看看default implementation for Backbone.Model.prototype.url,它会有意义:

url: function() {
  var base =
    _.result(this, 'urlRoot') ||
    _.result(this.collection, 'url') ||
    urlError();
  if (this.isNew()) return base;
  return base.replace(/([^\/])$/, '$1/') + encodeURIComponent(this.id);
},

后来的评论显示(发布此答案后)问题与如何设置属性有关。

通常,您应该始终使用model.set("id", idValue)进行所有属性更改,尤其是ID属性。 (如果您已将idAttribute设置为模型原型上的其他内容,请将该名称用作第一个参数而不是"id"。)

更一般地说,直接访问model.attributes使用model.set()model.get()是一个坏主意。 model.id属性是一种方便,您基本上应该将其视为只读; Backbone将在涉及id属性的每个set()调用中适当地修改它。 - Platinum Azure 18小时前