我需要fetch
具有特定身份的数据
以及在视图实例中定义的id
这个例子,请参阅MyModel定义中的注释:
// my view instance
var myView = new MyView({
model: {id: 12321}
});
MyView = Backbone.View.extends({
initialize: function()
{
myModel.fetch();
}
});
MyModel = Backbone.Model.extends({
url: function url ()
{
// how to get the id passed to view instance?
return "http:..../id/" + this.id;
}
});
答案 0 :(得分:3)
模型不应该知道View的存在,因此View应该是模型的id
获取的那个:
MyView = Backbone.View.extends({
initialize: function()
{
myModel.id = this.model.id;
myModel.fetch();
}
});
(我已经使用你的示例代码作为我的示例的模板,但我不得不说我觉得它有几个奇怪的东西,我想这只是一个品味问题)
很难做到这一点,但正如您所要求的,我将与您分享我对您的示例代码的个人代码审查。按照原样:非常谦虚的意见。
我不会使用可以产生混淆的属性名称:
var myView = new MyView({
model: {id: 12321}
});
进入这个实例this.model
正在引用原始哈希,但在Backbone上下文中这违背了直觉,即这将是 Backbone.Model
我宁愿改变这样的事情:
var MyView = Backbone.View.extend({
initialize: function( opts ){
this.model_id = opts.model_id;
}
})
var myView = new MyView({ model_id: 12321 });
我认为命名更直观。
此代码仅在myModel
的范围更大的情况下才有效:
MyView = Backbone.View.extends({
initialize: function()
{
myModel.fetch();
}
});
我更喜欢使用更多封装的范围,即使在View的外部上下文中声明了myModel
,View也应该使用其私有上下文的变量。例如
var MyView = Backbone.View.extends({
initialize: function( opts ) {
this.model = opts.model;
this.model.fetch();
}
});
var myView = new MyView({ model: myModel });
检查我在var
前面添加了MyView
的详细信息,因为如果不是MyView
将是window
全局变量。
在你的例子中,这......
MyModel = Backbone.Model.extends({
url: function url ()
{
// how to get the id passed to view instance?
return "http:..../id/" + this.id;
}
});
...可归纳为:
MyModel = Backbone.Model.extends({
urlRoot: "http:..../id"
});