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 メソッドには 4 つのプロパティがあります。

ブラウザで localhost をナビゲートしてモデルの URL を確認しましたが、正しいです。それでは、なぜモデルはjsonファイルの値を取得できないのでしょうか?

4

1 に答える 1

5

データがモデルが findAll に期待するものではないため、エラー メッセージが表示されるはずです。JSON は配列である必要があります (または、少なくとも長さのプロパティが必要です)。

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

idまた、SearchModelのプロパティを次のように設定することもできますuid

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