骨干和改变模型属性

时间:2011-11-06 13:43:43

标签: javascript backbone.js

我正在开发部分基于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;
}

任何提示我做错了什么?什么事件集方法触发了,为什么我的渲染方法在错误的对象之后呢?

2 个答案:

答案 0 :(得分:1)

在Backbone视图的initialize方法中尝试这个:

_.bindAll(this, "render");

有关此问题的解释,请参阅Backbone.js FAQ。在Backbone视图中,通常的做法是确保this变量指向当前函数作用域中定义的View对象,正如人们通常希望的那样。

答案 1 :(得分:0)

绑定到侦听更改事件时,必须将侦听器函数绑定到当前视图http://documentcloud.github.com/backbone/#FAQ-this