CanJS添加自定义MODEL方法

时间:2013-11-09 15:06:11

标签: javascript rest javascriptmvc canjs canjs-model

我想添加另一个函数来从CanJs模型中获取结果

我有这样的事情:

   VideomakerModel = can.Model({
        id:'ID',
        findAll: 'GET /videomakers/',
        findNear:  function( params ){
                         return $.post("/get_near_videomakers/",
                         {address:params.address},
                         undefined ,"json")
                    }
         },{});

    VideomakerModel.findNear({address : "Milan"}, function(videomakers) {
                var myList = new VideomakerControl($('#accordionVm'), {
                videomakers : videomakers,
                view: 'videomakersList'
            });
        });

如果我将方法命名为findAll,它可以正常工作, 否则命名为findNear它永远不会到达回调

我应该扩展MODEL是否有某种方法?有没有办法添加像FindAll这样的函数?

非常感谢

2 个答案:

答案 0 :(得分:2)

CanJS仅将转换添加到标准findOnefindAll等模型方法的Model实例中。您必须通过VideoMaker.model(针对单个项目)或VideoMaker.models(针对多个项目)运行结果,在您的其他实施方案中自行完成此操作:

VideomakerModel = can.Model({
  id:'ID',
  findAll: 'GET /videomakers/',
  findNear:  function( params ) {
    var self = this;
    return $.post("/get_near_videomakers/", {
      address:params.address
    }, undefined ,"json").then(function(data) {
      return self.model(data);
    });
  }
 },{});

答案 1 :(得分:0)

如果我理解这个问题,就必须这样做:

 VideomakerModel = can.Model({
       id:'ID',
       findAll: 'GET /videomakers/'
    }, 
    {
       findNear: function(options, success){
           can.ajax({
                url: "/get_near_videomakers/",
                type: 'POST',
                data: options,
                success: success
            })
       }  
    })

var myList = new VideomakerControl({});

myList.findNear({address:params.address}, function(resulrRequest){
    //success
} )