【问题标题】:Backbone - NestedModels - Nested sets not firing "change"Backbone - NestedModels - 嵌套集不触发“更改”
【发布时间】:2014-06-03 13:03:02
【问题描述】:

我正在使用这个Backbone nested plugin。 我这样写我的绑定:

var view = Backbone.View.extend({
    initialize: function(params) {
        this.model.bind('change', _.bind(this.rerender, this));
    }

我传递给视图的模型是这样声明的,在全局范围内的视图之外:

newModel = new Backbone.NestedModel(jsonData);

当我编写 newModel.set("prop", "value") 时,它会触发更改并触发重新渲染

但是当我写 newModel.set("prop.prop", "value") 时,它不会触发“更改”如果 prop.prop 已经存在。这意味着未检测到值更改。

但检测到新值:newModel.set("newProp.newProp", "value") 触发更改

嵌套可以正常工作

我可以newModel.get("prop.prop") 它返回值

现在,如果我听特定属性,它确实有效:

this.model.bind('change:prop.prop', _.bind(this.rerender, this));
} //fires rerender

根据插件文档,在任何情况下听“更改”都应该触发更改:

// 这将在设置或更改 'name.middle.initial' 时触发

user.bind('change', function(model, newVal){ ... });

但事实并非如此。我做错了什么

【问题讨论】:

    标签: javascript json backbone.js nested backbone-views


    【解决方案1】:

    如果您尝试使用listen to 将事件委托给视图会怎样?

    指出:
    - 您可以将上下文作为第 4 个参数传递,因此您不需要绑定回调函数,这会使您的代码由于不必要的函数调用而变慢。

    例如

    var view = Backbone.View.extend({
        initialize: function(params) {
            this.listenTo(this.model, "change", this.rerender, this);
         }
    

    希望此解决方案对您有所帮助。

    干杯

    【讨论】:

    • 这仍然不起作用。行为完全相同,但我发现了更多细节(将编辑问题)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    相关资源
    最近更新 更多