如果我有一些位掩码常量,即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? */
);
答案 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对象,并且更清楚它们是类级别常量。