Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model EmberJS:未使用数据初始化模型(ember数据)_Model_Ember.js_Ember Data - Fatal编程技术网

Model EmberJS:未使用数据初始化模型(ember数据)

Model EmberJS:未使用数据初始化模型(ember数据),model,ember.js,ember-data,Model,Ember.js,Ember Data,我试图从后端加载一些JSON并启动一个模型。到目前为止,我认为我得到了模型,但没有设置其属性:( 以下是我的测试代码: window.App = Ember.Application.create(); App.Router.map(function() { this.resource('person', { path: '/people/:person_id' }); }); App.Adapter = DS.RESTAdapter.extend({ namespace: '~u

我试图从后端加载一些JSON并启动一个模型。到目前为止,我认为我得到了模型,但没有设置其属性:(

以下是我的测试代码:

window.App = Ember.Application.create();

App.Router.map(function() {
   this.resource('person', { path: '/people/:person_id' });
});

App.Adapter = DS.RESTAdapter.extend({
   namespace: '~user1/embertest'
});

App.Store = DS.Store.extend({
   revision: 11,
   adapter: App.Adapter,
});

var attr = DS.attr;
App.Person = DS.Model.extend({
   firstName: attr('string'),
   lastName: attr('string')
});

App.PersonRoute = Ember.Route.extend({
   model: function(params) {
      return App.Person.find(params) ;
   }
});

App.PersonController = Ember.Controller.extend({
   contentDidChange: function() {
      debugger ;
      console.info(this.get('content'));
   }.observes('content.isLoaded')
}) ;
数据从json文件加载,该文件仅包含:

{"persons": {"firstName": "Jeff","lastName": "Atwood"}}
现在,通过url localhost/~user/embertest.html#people/10,我看到数据被加载,控制器方法contentDidChange被调用

this.content.get("firstName") ; // or this.get("content").get("firstName")
它返回“未定义”。这里出了什么问题

最后,以下是我的模板,它们位于:

<script type="text/x-handlebars" data-template-name="person">
    Person: {{content.firstName}}
</script>
<script type="text/x-handlebars" data-template-name="application">
    {{outlet}}
</script>

人员:{{content.firstName}
{{outlet}}

干杯

尝试删除PersonRoute,默认的模型挂钩应该可以。我认为这里发生的是App.Person.find(params)发送一个findQuery()而不是find(id)。

我认为JSON不正确

{"persons": {"firstName": "Jeff","lastName": "Atwood"}}
执行App.person.find(params.person\u id)时,根元素应为“person”

我也不认为您需要PersonRoute,因为默认情况下,该路由应执行以下操作:

App.PersonRoute = Ember.Route.extend({
  model: function(params) {
    return App.Person.find(params.person_id) ;
  }
});

当动态路径段中有“*\u id”时。

JSON根目录应该是“person”而不是“persons”如果我这样做,我会在控制台中得到以下错误消息:错误:断言失败:您的服务器返回了一个带有密钥person的哈希,但您没有ITI的映射如果我删除该路由,我会得到大致相同的结果,除了json的根元素必须是“person”,并且this.content.get(“firstName”)现在返回null而不是null“undefined”我想你在返回的json中也必须有一个id。我只是意识到你的PersonController是一个控制器,而不是一个ObjectController。也要改变它。注意,在这里很难有效地帮助你。一个完整的例子会更有用:)(JSFIDLE或jsbin)如何在JSIDdle中伪造url?在这里,我创建了一个JSIDdle,但由于url不起作用:一些pbs使用JSIDdle。我还有一个问题,在json中,属性必须是模型的未评分版本。例如,它应该是first_name:“jeff”我已经删除了它,并将“persons”更改为“person”“。请参阅我在另一篇帖子上的评论。结果仍然是一个空模型!
App.PersonRoute = Ember.Route.extend({
  model: function(params) {
    return App.Person.find(params.person_id) ;
  }
});