0

有以下can.Model:

var CaseModel = can.Model.extend({
    findAll: function(args){
        var def = $.Deferred();
        args.sobject.retrieve(args.criteria, function(err, records) {//records should be populated into view
            if(err) def.reject(err);
            else def.resolve(records);
        });
        return def;
    }}, {});

我应该如何使用 init 方法实现 can.Control 以使用 defered=CaseModel.findAll({sobject: new SObjectModel.Case()}) 填充 can.view ,如下所示:

this.element.html(can.view('recipes', Defered));

以及这些记录如何在 mustache 模板中循环:{{#each ???? }}

谢谢

4

1 回答 1

0

以下是如何使用延迟的示例:

var CaseModel = can.Model.extend({
    findAll: function(args){
        var def = $.Deferred();

         setTimeout(function () {
            console.log('time');
           def.resolve([{name: 'sam'}]);
        }, 1000);

        return def.promise();
    }}, {});

var Control = can.Control({
  init: function (ele, options) {
    var self = this;
    var pro = CaseModel.findAll({});


    can.view('view', {records: pro})
    .then(function(frag) {
      self.element.html(frag);
    });

  }
});

var control = new Control('.app');


 <script type="text/mustache" id="view">
  VIEW
  <ul>  
    {{#each records}}
            <li>    
                {{name}}
           </li>
       {{/each}}
   </ul>
 </script>

这是一个演示 http://jsbin.com/kedih/1/edit

您应该能够对其进行调整以包含您的args.sobject.retrieve而不是setTimeout示例中的。

于 2014-06-10T06:09:49.093 回答