2

我想我在这里可能有一个奇怪的用例。我有一个Code带有code, title,description属性的模型。用户正在记录工作(医疗保健),他们输入code,比如说7,并且7总是意味着发生了一些特别的事情,比如说“病人被治愈了”。不管怎样,无所谓。重点是,我不想费心在每个模型中保存titleand description,但我希望能够将它们拉出来进行显示。

因此 API 提供了一系列代码,例如[ 1, 13, "A4" ]. 我正在尝试同时使用can.Model.parseModelcan.Map.define将该数组强制转换为Code模型,但我遇到了困难。

为什么在此示例中从未调用过 parseModel、parseModels? 小提琴

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({});
4

1 回答 1

2

.parseModels仅在检索 CRUD 服务数据期间调用。

为了使您的示例工作,您必须使 Model.parseModel 将每个 Code 数组转换为一个对象数组。

或者,您可以将模型的 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}}) )
    }
  }
}
于 2014-09-29T22:26:58.617 回答