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;
})
Другие вопросы по тегам