ember.js - Ember (data) linkTo 不传递模型,只需获取新模型

标签 ember.js ember-data

在 Handlebars 模板中使用 linkTo 帮助程序时,Ember 在我添加到路由中的序列化程序的帮助下为链接设置正确的 URL:

serialize: function(slug, params) {
    var name, object;
    object = {};
    name = params[0];
    object[name] = slug;
    return object;
}

当我单击链接时,Ember 会转换到正确的页面,其中包含正确的 slug 和所有内容,但它没有正确的数据,并且它是这样说的。我相信这是因为我作为第二个参数传递给 linkTo 语句的只是 slug 而不是整个模型。

是否可以让 Ember 简单地获取数据,就像我只是在地址栏中输入 URL 而不是依赖传递给 linkTo 语句的模型(并非如此)一样?

更新 我已经在路线上的 activate 方法中尝试过此操作,但现在看来问题是渲染必须等到此操作完成。

activate: function() {
    this.context.isLoaded = false;
    this.model(this.context.query.slug);
}

有什么想法吗?也许甚至有一个更漂亮的解决方案?

最佳答案

在 IRC 上一些人的帮助下,我最后想出的解决方案是使用 setupController 钩子(Hook),就像你提到的 Darshan 和这样的序列化器:

CustomRoute = Ember.Route.extend({
    setupController: function(controller, model) {
        var modelName = this.routeName.substr(0, 1).toUpperCase() + this.routeName.substr(1),
            slug = model;
        if (model.hasOwnProperty('slug'))
            slug = model.slug;
        controller.set('model', App[modelName].find({'slug': slug}));
    },
    serialize: function(slug, params) {
        var name, object;
        object = {};
        name = params[0];
        object[name] = slug;
        return object;
    }
});

这样,您可以只提供路由的 slug 作为 linkTo 帮助程序的第二个参数,而不是模型,序列化器将正确设置 URL,然后 setupController 将检查模型是否具有属性slug,这正确地意味着它是一个正确的模型,如果不是,它只是猜测该模型只是 slug,然后它将使用 DS.Model.find 方法返回一个 promise 到 Controller 模型商店。

因为每次输入路由时都会调用 setupController,而模型钩子(Hook)仅有时被调用,因此每次都会使用 DS.Model.find 方法通过 Promise 获取数据,瞧 - 每次都获取数据输入路线。

这假设您使用 Ember.Data 并且您的模型对象名为 App.*route name* 以大写字母开头,但可以轻松对其进行修改以满足任何需要。

对于我的应用程序中的所有路线,我现在从此路线进行子类化(扩展),从而为所有路线获得我想要的行为。

关于ember.js - Ember (data) linkTo 不传递模型,只需获取新模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17339890/

相关文章:

ember.js - Ember : How to get class properties

javascript - Ember js PushObject 覆盖数组

ember.js - 如何在EmberJS的路由中加载belongsTo/hasMan关系

ember.js - Ember.js动态模型属性

javascript - Ember 数据 RestAdapter 嵌入了 hasMany

javascript - emberjs 拆分 Promise 数组

ember.js - 使用 Ember.set() 设置 'content' 属性

ember.js - Ember - 理解逆关系

javascript - 找不到从`AppName/resolver Ember 测试中导入的模块 `ember-resolver`

ember.js - Controller 和路由中的模型 Hook 有什么区别?