我试图在canjs中使用AMD实现MVC.为此,我使用requirejs.这是我的domains.json文件:
[
"1":{"uid": "1","urls": "domain1.abc.com"},
"2":{"uid": "2","urls": "domain2.abc.com"},
"3":{"uid": "3","urls": "domain3.abc.com"}
]
Run Code Online (Sandbox Code Playgroud)
这是我的domainModel:
define(['can'], function(can){
SearchModel= can.Model({
id: 'uid',
findAll: 'GET /domains.json'
},{})
return SearchModel;
})
Run Code Online (Sandbox Code Playgroud)
这是我的控制器:
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;
}
Run Code Online (Sandbox Code Playgroud)
这是我的主要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;
});
Run Code Online (Sandbox Code Playgroud)
我正在寻找我的代码.我把断点.在模型断点上我没有在chrome devtools中获取局部变量的值.
url属性具有'undefined/{id}'值,findAll方法具有四个属性,即参数,调用者,长度和名称,其值分别为null,null,0和""
我通过在浏览器上浏览localhost来检查我的模型网址,这是正确的.那么为什么模型无法获取json文件的值?
我can.Model用来检索数据id:
Invoice = can.Model({
findAll: 'GET /invoices',
create : "POST /invoices",
update : "PUT /invoices/{id}",
destroy : "DELETE /invoices/{id}"
},{});
Run Code Online (Sandbox Code Playgroud)
导航到时/invoices,结果如预期,如:
[
0: {
"ID": "1",
"Client": "Client1",
},
1: {
"ID": "2",
"Client": "Client2"
}
]
Run Code Online (Sandbox Code Playgroud)
但是,使用Invoice.findAll并记录到控制台的数据看起来像这样,并为列表中的每个元素重复相同的数据项:
[
0: {
"ID": "1",
"Client": "Client1"
},
1: {
"ID": "1",
"Client": "Client1"
}
]
Run Code Online (Sandbox Code Playgroud)
来自服务器的响应是正确的,那么为什么它被解释为相同项的列表?