CanJS解析模型和数据强制

时间:2014-09-29 22:14:05

标签: javascript canjs canjs-model

我想我可能在这里有一个奇怪的用例。我有一个Code模型,其中包含codetitledescription个属性。用户正在记录工作(医疗保健),他们输入code,说7,而7总是意味着发生了特定的事情,说“患者已经治愈了”。无论如何,无所谓。重点是,我不想在每个模型中保存titledescription,但我希望能够将它们拉出来进行显示。

因此,API提供了一系列代码,例如[ 1, 13, "A4" ]。我正在尝试同时使用can.Model.parseModelcan.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({});

1 个答案:

答案 0 :(得分:2)

只有在检索CRUD服务数据时才会调用

.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}}) )
    }
  }
}