【问题标题】:Preventing the change event which renders a view for a particular attribute in model防止为模型中的特定属性呈现视图的更改事件
【发布时间】:2014-12-18 14:29:56
【问题描述】:

我通过监听模型更改来呈现我的视图,但我不想在模型中的特定值发生更改时触发或呈现视图。 this.options.model.on('改变', this.render, this);

model.set(x: "hello");

我不想在设置模型时触发渲染。

【问题讨论】:

  • 在添加动作监听器之前设置模型。
  • 我正在初始化函数中执行该操作

标签: backbone.js


【解决方案1】:

如果模型中的属性不多,那么你可以听听你关心的:

// don't include change:x
this.listenTo(this.model, 'change:a', this.render);
this.listenTo(this.model, 'change:b', this.render);
this.listenTo(this.model, 'change:c', this.render);

或者,您可以在渲染前添加检查:

this.listenTo(this.model, 'change', function (model, value, options) {
    if (model.changed.x === undefined) {
        this.render();
    }
});

【讨论】:

  • 我正在尝试创建一个用于编辑的表单,其中的值应预填充。所以我在渲染期间通过调用模型上的更改事件来填充数据,因为默认值为空。但是我必须编辑的字段之一是在不同的模式/视图中,所以当我编辑和设置它时,视图再次呈现,之前编辑的值消失了。
【解决方案2】:

尝试在调用model.set()时设置silent选项

model.set({ x: "hello" }, { silent: true });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多