can-model не может получить данные из файла.json
Я пытаюсь реализовать MVC с использованием AMD в canjs. Для этого я использую requirejs. Это мой файл domains.json:
[
"1":{"uid": "1","urls": "domain1.abc.com"},
"2":{"uid": "2","urls": "domain2.abc.com"},
"3":{"uid": "3","urls": "domain3.abc.com"}
]
Это моя domainModel:
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, имеющий четыре свойства: аргументы, вызывающий объект, длина и имя, имеющие значения null, null, 0 и "" соответственно
Я проверил свой URL модели, просматривая localhost в браузере, и это правильно. Тогда почему модель не может получить значения файла json?
1 ответ
Вы должны получить сообщение об ошибке, так как ваши данные не соответствуют ожиданиям ModelAll. Ваш JSON должен быть массивом (или, по крайней мере, иметь свойство длины):
[
{"uid": "1","urls": "domain1.abc.com"},
{"uid": "2","urls": "domain2.abc.com"},
{"uid": "3","urls": "domain3.abc.com"}
]
Вы также, вероятно, хотите установить id
недвижимость в вашей поисковой модели uid
:
define(['can'], function(can){
SearchModel= can.Model({
id: 'uid',
findAll: 'GET /domains.json'
},{})
return SearchModel;
})