backbone.js - 当我更改某些属性的值或从列表中删除时如何通知 View ?

标签 backbone.js

我需要创建一个模型来保存一个元素的 css 属性。我的模型如下所示:

StyleModel = Backbone.Model.extend( {
    defaults : {
        productName : '',
        styles:{
            'font-weight':'normal',
            'font-style':'normal',
            'text-decoration':'none',
            'visibility':'visible'
            'color':'blue',
            'border-width':'1px',
            'border-color':'white',
            'font-color':'white'
        }
    },
    initialize : function(property, values) {}
...}

当我更改某些属性的值或从列表中删除时如何通知 View ? (例如,当用户将 border-width 设置为 3px 或删除 font-weight 时。或者不将属性保存在哈希中是更好的解决方案并设置每个属性都是模型中的元素?)

最佳答案

Backbone 无法自行识别哈希中的设置。但是您可以创建为您处理此问题的方法:


Backbone.Model.extend({
  setCss: function(key, value){
    var css = this.get("styles");
    css[key] = value;
    this.trigger("change", this, key, value);
    this.trigger("change:css", key, value);
    this.trigger("change:css:" + key, value);
  }
});

然后你会调用 model.setCss("background-color", "#ff0faf")它会触发您在 View 中绑定(bind)的三个“更改”事件。

在 View 中,您可以在初始化程序中绑定(bind)更改事件,并让 jQuery 将所有样式应用于 View 控制的 DOM 元素:


Backbone.View.extend({
  initialize: function(){
    this.model.on("change:css", this.setCss, this);
  },

  setCss: function(){
    var css = this.model.get("styles");
    this.$el.setCss(css);
  }
});

在应用新集合之前,您可能需要清除现有 css,以确保删除任何已删除的内容。不过,更有可能的是,您会想要一个 deleteCss模型上的方法,让它提高 css:deleted模型中的事件,并让 View 通过删除有问题的 css 属性来响应该事件。

关于backbone.js - 当我更改某些属性的值或从列表中删除时如何通知 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10245315/

相关文章:

javascript - subview 中的按钮在 Backbone js的主视图中不起作用

testing - 如何在守夜人测试中绕过recaptcha人工检查?

javascript - 带有登录和搜索机器人的单页应用程序

backbone.js - WordPress 3.5 媒体管理器 : Is there a "good" way to add an additional select option within Create Gallery tab?

javascript - 通过点击非模板元素对集合进行主干排序

javascript - Backbone /Marionette : why shouldn't I trigger route handler on navigate?

javascript - 主干集合 groupby 数组属性

javascript - 使用node.js和backbone.js将单页面应用程序转换为多页面网站

javascript - 使用 Backbone.js 是否需要使用表单标签?

javascript - Backbone.js:我正在使用 Web 服务调用来使用 Backbone.js 获取集合对象,如何在 html 中显示集合响应对象数据?