在Backbone模型上的defineProperty

hom*_*mtg 7 javascript backbone.js

如果我想在我的骨干模型中添加自定义属性,那么最好是这样做吗?是否有更好的方法或完全不同的方法来实现我想要实现的功能?

var myModel = Backbone.Model.extend({

   defaults:{
    monthly_amount: 100
   },

   initialize: function(model, options){

     var m = this;

     Object.defineProperty(this,"yearly_amount",{
       get: function() {
                         return (m.get("monthly_amount") * 12);
                       },
       set: function(value) {
                         m.set("monthly_amount", (value/12) );
                       }
     });

   }
});
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑:该属性只是"虚拟",我不希望它在将模型保存到服务器时属于模型属性.

Pet*_*ons 2

因此,这里的一般问题通常被称为“计算属性”,并且有一些主干插件可以提供此功能(见下文)。Backbone 使用get/set方法调用风格而不是defineProperty样式,因此您的方法将使值计算对视图不透明,从而与骨干网的设计有很大的背离。get/set维护正确的模型和接口的插件change将维护基本的模型 API,因此视图不必以不同的方式对待这个特定的模型属性。

另请参阅插件的主干 wiki

可用插件: