我想我可能在这里有一个奇怪的用例。我有一个Code
模型,其中包含code
,title
,description
个属性。用户正在记录工作(医疗保健),他们输入code
,说7
,而7
总是意味着发生了特定的事情,说“患者已经治愈了”。无论如何,无所谓。重点是,我不想在每个模型中保存title
和description
,但我希望能够将它们拉出来进行显示。
因此,API提供了一系列代码,例如[ 1, 13, "A4" ]
。我正在尝试同时使用can.Model.parseModel和can.Map.define将该数组强制转换为Code
模型,但我遇到了困难。
为什么在此示例中从不调用parseModel,parseModels? fiddle
Code = can.Model.extend({
parseModel: function(data) {
// return { code:data }
console.log('Never hit!');
},
parseModels: function() {
// ...
console.log('Never hit!');
}
},{
_title: can.compute(function() {
// return title from cached lookup
})
});
Model = can.Model.extend({
findAll: 'GET /Models'
},{
define: {
Codes: {
Type: Code.List
}
}
});
can.fixture('GET /Models', function() {
return [
{ Codes: [1,2,3] }, // I want to turn each number into an object
{ Codes: [4,5,6] },
{ Codes: [7,8,9] }
];
});
Model.findAll({});
答案 0 :(得分:2)
.parseModels
。
要使您的示例正常工作,您必须使Model.parseModel将每个Code数组转换为一个对象数组。
或者,您可以将Model的define.Codes.Type更改为:
Codes: {
type: function(newVal){
if(newVal instanceof Code.List) {
return newVal
} else {
return new Code.List( newVal.map(function(num){ return {value: num}}) )
}
}
}