backbone.js位域值增加了模型的最佳实践

时间:2012-01-18 07:08:53

标签: backbone.js

如果我有一些位掩码常量,即kRequired = 0x1,kLocked = 0x2,kTypeA = 0x4,kTypeB-0x8等

这些应该添加到模型中,因为即使它们是不可变值,我也不会拥有全局变量。在下面的代码中的A. B. C. D或另一种方式。?

有一大堆(30),只是在下面的例子中展示了一对。在我看来,它们不是设置/获取的实际实例值,而是像作用于模型类的全局查找一样。

  var Entry = Backbone.Model.extend({
      initialize: function(){

      /** A) here the models init ?  **/
      this.kRequired = 0x1 ,
      this.kLocked - 0x2. 

      /* .... */ 
      },


      /*  B) here as models meta data ?? */
      kRequired ": 0x1.
      kLocked    : ox2.

      isLocked = function{){
        return ((this.get('bitinfo') & kLocked) != 0)
      }


     });


    new Entry({/* C) here with instance data */
               {
                bitinfo: 0x102, 
                name:"abd"
               },
               /* or D) with class data here? */
               );

2 个答案:

答案 0 :(得分:0)

以下是您的参赛模型的理想结构:

 var Entry = Backbone.Model.extend({
          // define the mode variables in defaults 
          defaults:{
            kRequired:0x1,
            kLocked:0x2
            instaceVariable:""  // can add default value
        },
          initialize: function(){          
                var req=this.get("kRequired") // to retrieve kRequired
                var lock=this.get("kLocked")   // to retrieve kLocked
          }     
         });
  var myEntry=new Entry({instaceVariable:"New Instace value"}); 
   //create an instance of Model

您可以在模型的默认值中添加常量值,因此可以使用模型实例访问它们。您需要通过.get()函数访问它们。

答案 1 :(得分:0)

我遇到了同样的问题。我不想使用Umesh提出的默认解决方案,因为我将保存模型,并且不需要无关的字段。

我最终在模型类中创建了一个配置对象。对于您的示例,它看起来像:

var Entry = Backbone.Model.extend({
 // ...
});
Entry.constant = {};
Entry.constant.kRequired = 0x1;
...

然后您可以像使用任何普通的javascript变量一样使用Entry.constant.kRequired。它不依赖于创建一个新的Entry对象,并且更清楚它们是类级别常量。