2013-03-26 63 views
0

使用时,我已经在骨干网中定义像这样一个模型,收集没有定义:自定义字段中收集

$(document).ready(function() { 

DeviceModel = Backbone.Model.extend({ 
    urlRoot: '/ajax/mvcDevices', 

    validationRules: { 
     name: [{ rule: 'required'}], 
     mac: [ 
     { rule: 'required' }, 
     { rule: 'isMacAddress' } 
     ], 
     speed: [{ rule: 'required'}] 
    }, 

    preprocess: { 
     name: ['clean', 'trim'], 
     speed: ['clean', 'trim'] 
    } 
}); 

DeviceCollection = Backbone.Collection.extend({ 
    url: '/ajax/mvcDevices', 
    Model: DeviceModel 
}); 
}); 

然而,一个集合里,这些模型时,列出的自定义字段都没有定义的。我在这里错过了什么?如果你创建一个new运营商defaults所有属性将被复制到新的对象模型

var DeviceModel = Backbone.Model.extend({ 
    urlRoot: '/ajax/mvcDevices', 

    defaults: { 
     validationRules: { 
      name: [{ rule: 'required'}], 
      mac: [ 
      { rule: 'required' }, 
      { rule: 'isMacAddress' } 
      ], 
      speed: [{ rule: 'required'}] 
     }, 

     preprocess: { 
      name: ['clean', 'trim'], 
      speed: ['clean', 'trim'] 
     } 
    } 
}); 

var DeviceCollection = Backbone.Collection.extend({ 
    url: '/ajax/mvcDevices', 
    Model: DeviceModel 
}); 

var collection = new DeviceCollection(); 

var model = new DeviceModel({id: 1}); 
collection.add(model); 
console.log(collection.get(1).get('validationRules')); 
console.log(collection.get(1).get('preprocess')); 

从骨干文档,因此:

+1

'Model:DeviceModel' =>'model:DeviceModel'? (小写'm') – WiredPrairie 2013-03-26 12:09:17

+0

@WiredPrairie(facepalm)就是这样,一直注视着我的脸。非常感谢。 – Nidonocu 2013-03-26 13:48:46

回答

-1

您可以使用defaults模型属性来执行这样的默认值它取决于您创建模型对象的方式。

+0

啊..这里的问题是这些值不是数据项,所以我不希望他们进入模型属性并发送到服务器等等。他们是用于处理模型的验证代码的支持数据。 – Nidonocu 2013-03-26 13:44:10

+0

@Nidonocu:在这种情况下,您声明它们的方式是正确的,它们应该可以作为“标准”实例属性(如so,modelInstance.attribute(例如modelInstance.validationRules))访问。换句话说,不要通过Backbone.Model的get()来访问它们。 – robmisio 2013-03-26 13:46:50