gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:00:57 24 4
gpt4 key购买 nike

在 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,这正确地意味着它是一个正确的模型,如果不是,它只是猜测模型只是一个蛞蝓,然后它将使用 DS.Model.find 方法向 Controller 模型存储返回一个 promise 。

因为 setupController 在每次进入路由时都会被调用,而模型钩子(Hook)只是有时会被调用,所以 DS.Model.find 方法每次都会被用来通过 Promise 获取数据,瞧——每次进​​入路由时都获取数据.

这假设您使用 Ember.Data 并且您的模型对象称为 App.*route name* 以大写字母开头,但可以轻松修改它以适应可能有的任何需要。

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com