我正在开发部分基于Backbone.js todo example app的应用程序。一切都很顺利,直到我尝试添加编辑功能。我发现的是一些奇怪的行为。
我有某种形式,它创建新的模型对象并将其添加到集合中。创建新模型(绑定到“添加”事件)时,也会创建新视图并将其添加到dom。就像在那个todo应用程序中一样,它可以工作。
现在我尝试添加编辑功能。我在视图对象方法中创建输入元素并尝试“提交”更改。我首先尝试使用view.model.set -method更改模型属性。这有效,但触发了一些奇怪的事件。这可能没问题,因为我想在模型改变时再次渲染视图。
主要问题:在我的视图(工作一个)对象中,有一个包含这个调试行的render方法:'console.log(this)'。当第一次按窗体创建视图对象时,此行输出右对象。当我尝试编辑模型并为其设置新值时,调试打印完全不同的对象。这不起作用,渲染失败。
我希望这些例子足够。
主要观点:
this.myCollection.bind('add', function(model){
var myView= new myViewRow({
model: model
});
$("#container").find('tbody').append(myView.render().el);
}, this);
并在myView中:
render: function() {
console.log(this);
var data = this.getAsArray();
$(this.el).html(content);
return this;
}
任何提示我做错了什么?什么事件集方法触发了,为什么我的渲染方法在错误的对象之后呢?
答案 0 :(得分:1)
在Backbone视图的initialize方法中尝试这个:
_.bindAll(this, "render");
有关此问题的解释,请参阅Backbone.js FAQ。在Backbone视图中,通常的做法是确保this
变量指向当前函数作用域中定义的View对象,正如人们通常希望的那样。
答案 1 :(得分:0)
绑定到侦听更改事件时,必须将侦听器函数绑定到当前视图http://documentcloud.github.com/backbone/#FAQ-this