2014-02-13 49 views
1

我有一个路由为#/ 0,#/ 1,#/ 2这加载相应的模板时单击用户名称。 但是当我点击用户名下面的错误被抛出,Ember.js动态路由器不加载模板使用序列化

Error while loading route: TypeError: Object # has no method 'addArrayObserver'

但是,当我直接访问该网址本地主机:8080/dynam.html#/ 0,我得到的输出,

25

模板:

<script type="text/x-handlebars" data-template-name="application"> 
    {{outlet}} 
    </script> 

    <script type="text/x-handlebars" data-template-name="index"> 
    <h2>Names</h2> 
    <ul> 
    {{#each model}} 
     <li>{{#linkTo "test" this}}{{this.firstName}} {{this.lastName}}{{/linkTo}}</li> 
    {{/each}} 
    </ul> 
    </script> 

    <script type="text/x-handlebars" data-template-name="test"> 
    <h2>Item Loaded</h2> 
    {{#each model}} 
     <li>{{#linkTo "test" this}} {{Age}} {{/linkTo}}</li> 
    {{/each}} 
    </script> 

App.js:

App = Ember.Application.create({}); 

App.Router.map(function() { 
    this.route('test', {path: '/:id'}); 
}); 

App.IndexRoute = Ember.Route.extend({ 
    model: function(id){ 
     return [ 
       {id: 0, firstName: 'Kris', lastName: 'Selden'}, 
       {id: 1, firstName: 'Luke', lastName: 'Melia'}, 
       {id: 2, firstName: 'Formerly Alex', lastName: 'Matchneer'} 
      ]; 
    }, 
    serialize: function(model) { 
    return {id: model.id}; 
    }       
}); 

App.TestRoute = Ember.Route.extend({ 
    model: function(){ 
    return App.TestObj.getArray(); 
    } 
}); 

App.TestObj = Ember.Object.extend(); 
App.TestObj.reopenClass({ 
    testArr : [ {Age: '26' } ], 
    test1Arr : [], 
    getArray : function(){ 
    this.testArr.forEach(function(obj){ 
      this.test1Arr.pushObject(App.TestObj.create(obj)); 
     }, this); 
    return this.test1Arr; 
    } 

}) 

回答

0

当经由

{{#link-to routname model}} 

进入的串行化路由示范钩将不会被运行。相反,该模型由您在{{#link-to}}助手中设置的任何输入值设置。

所以在你的代码已经编写,当你点击

{{#linkTo "test" this}} 

您正在进入“测试”的路线,并设定模型你点击任何人。例如,如果您选择的第一人,你会设置TestRoute到模型:

{id: 0, firstName: 'Kris', lastName: 'Selden'} 

现在你呈现你的测试模板,其中包括{{#each模型}}帮手......但你的模型只有一个对象,所以它无法正常运行。

另一方面,当您直接使用url输入路线时,模型挂钩将会运行。这就是为什么你以这种方式运行时获得年龄值的原因。

通常,对于序列化路径,您应该使用模型挂钩来检索默认情况下通常会传入的信息。例如:

model: function(param){ 
    var id = param.id; //This will return the serialized portion of your url 
    return someFunction(id); //Use that serialized value to look up the correct model 
} 
+0

感谢您的回复。我应该在哪里使用返回“someFunction(id)”的模型,在IndexRoute或TestRoute中,我的模型的结构应该是什么。 – Jeevi

+0

你的模型结构应该是任何必要的。没有黄金标准,它只是您需要的相关信息的倾销地。 – gravityplanx