Emberjs序列化不会在{{linkTo}}上调用模型

时间:2013-08-11 06:07:53

标签: ember.js

我的路线格式如下#/ books / book /:bookId

当我在#/ books上并点击{{linkTo}}时,我的模型不在 执行并返回以下错误。

Error while loading route: TypeError {} 
Uncaught TypeError: Object 4 has no method 'addArrayObserver' 

我知道只有在用浏览器刷新页面时才会执行模型, 所以我使用了序列化,根据文档,它应该允许我的模型被执行 当我点击{{linkTo},但它没有。它返回上述错误。

utils.get是一个Ajax调用,它返回一个json ... 你能告诉我我做错了什么吗? 谢谢。

App.Router.map(function() {
    this.resource("books", function() {
        this.resource("book", {path: "/book/:bookId"});
    });
});

var BookModel = Ember.Object.extend({});
BookModel.reopenClass({
    find: function(bookId) {
        var assets = Ember.A();
        utils.get('book/' + bookId, function(response) {
            response.assets.forEach(function(c) {
                assets.pushObject(BookModel.create(c));
            })
        });
        return assets;
    }
});


var BooksModel = Ember.Object.extend({});
BooksModel.reopenClass({
    findAll: function() {
        var books = Ember.A();
        utils.get('books', function(response) {
            response.books.forEach(function(c) {
                books.pushObject(BooksModel.create(c));
            })
        });
        return books;
    }
});

var BookRoute = Ember.Route.extend({
    model: function(params) {
        return BookModel.find(params.bookId);
    }

    ,serialize: function(model, params) {
        return { bookId: model };
    }
});


<h2>books</h2>
<ul class="nav nav-tabs nav-stacked">
    {{#each item in model}}
        <li>
            {{#linkTo "book" item.id}}{{item.name}}{{/linkTo}}
        </li>
    {{/each}}
</ul>
{{outlet}}

1 个答案:

答案 0 :(得分:0)

基本上每个对象(例如BookRoute)都需要位于App命名空间下才能找到ember:

App.BookRoute = Ember.Route.extend({
  ...
});

此外,您应该将模型对象传递给linkTo帮助程序:

{{#linkTo "book" item}}{{item.name}}{{/linkTo}}

然后在serialize挂钩中,然后执行:

serialize: function(model) {
    return { bookId: model.id };
}

希望它有所帮助。

相关问题