9

我正在尝试在 canjs 中使用 AMD 实现 MVC。为此,我正在使用 requirejs。这是我的 domain.json 文件:

[            
"1":{"uid":     "1","urls": "domain1.abc.com"},
"2":{"uid":    "2","urls": "domain2.abc.com"},
"3":{"uid":    "3","urls": "domain3.abc.com"}
]

这是我的域模型:

define(['can'], function(can){
  SearchModel= can.Model({
     id: 'uid',
     findAll: 'GET /domains.json'
  },{})
  return SearchModel;
})

这是我的控制器:

define(['can','jquery'],function(can,$){
 domainController=can.Control({defaults:{view:"../view/search.hbs" }},           
  {
    init : function(element,options){   
        this.element.html(can.view(this.options.view,{
            searchlist : this.options.search
        }))
    }
});
return domainController;
} 

这是我的主要js:

equirejs(['can','controller/domainController','model/domainModel'],
 function(can, domainController,domainModel) {
   var Application = can.Control.extend({
    defaults :{ }
   },{  
        init: function(element,options){
         console.log('loaded');
         domainModel.findAll({}, function(domains){
            domainObject:{searchdomains : domains}
                 new domainController('#search',domainObject)
            });
        }
    })
return Application;
});

我正在追踪我的代码。我放了断点。在模型断点上,我没有在 chrome devtools 的局部变量中获取值。

url 属性具有 'undefined/{id}' 值,findAll 方法具有四个属性,即 arguments、caller、length 和 name,其值分别为 null、null、0 和 ""

我已经通过浏览器上的 localhost 导航检查了我的模型 url,它是正确的。那么为什么模型无法获取 json 文件的值呢?

4

1 回答 1

5

您应该会收到一条错误消息,因为您的数据不是 Model 对 findAll 的期望。你的 JSON 应该是一个数组(或者至少有一个长度属性):

[
  {"uid":     "1","urls": "domain1.abc.com"},
  {"uid":    "2","urls": "domain2.abc.com"},
  {"uid":    "3","urls": "domain3.abc.com"}
]

您可能还希望将idSearchModel 中的属性设置为uid

define(['can'], function(can){
  SearchModel= can.Model({
     id: 'uid',
     findAll: 'GET /domains.json'
  },{})
  return SearchModel;
})
于 2015-05-05T15:26:28.777 回答