gpt4 book ai didi

javascript - 避免展示新模型本身

转载 作者:行者123 更新时间:2023-12-03 05:48:01 25 4
gpt4 key购买 nike

我有一个表单来创建一个名为“路线”的新模型。表单中有一个称为接管的选择字段,显示所有路由,用户可以选择一个来获取与所选路由的关系。我的问题是,新创建的路线甚至可以在选择字段中选择,因为我只是返回'this.get('store').findAll('routes');'。如何从选择中删除新模型,因为无法创建与其自身的关系。

在路由中,我创建一个空模型,然后用户可以修改表单中的属性:

//route.js
model() {
return this.store.createRecord('route', {});
},

模板:

//route.hbs
<form>
//some fields
//and a select-component:
{{my-select
selected=model.takeover
options=routes
}}
</form>

我在 route 提供给 optional 的路线:

//route.js
routes: Ember.computed(function () {
return this.get('store').findAll('route');
}).readOnly(),

所以路线是包括新型号在内的所有路线。但它不应该能够选择模型本身,所以我必须将其从 route 删除。我该怎么做?

最佳答案

您可以使用计算属性来简单地按非新记录进行过滤

routes: Ember.computed.filterBy('model', 'isNew', false)

isNew对于尚未持久化的模型来说是正确的(即您还拥有 .save() )。您可以在这里阅读更多相关信息:http://emberjs.com/api/data/classes/DS.Model.html#property_isNew

我会将对商店的请求与过滤列表的 CP 分开。这样我们就有了向模型 Hook 中的后端/存储发出请求的逻辑(它应该在的位置),然后将结果发送到我们的 Controller ,这是我们用于过滤的 CP 可以驻留的地方。

编辑回复评论:

“ Ember 之路”

通常,Ember 希望对后端的请求存在于路由文件中。它旨在访问商店并配备异步错误处理功能。您通常会在模型 Hook 中请求此操作:

// route.js
model() {
return this.get('store').findAll('route');
}

如果您也想在此处创建新记录,可以这样做:

// route.js
model() {
this.get('store').createRecord('route');
return this.get('store').findAll('route');
}

model的结果钩子(Hook)被传递到 setupController方法。该方法会自动触发,并且它是构建 Controller 对象的方法。 Controller 将模型传达给您的 View 。这是它默认执行的操作:

setupController(controller, model) {
controller.set('model', model);
}

您不必在此处覆盖任何内容,但最好知道 Controller 何时为我们创建。

现在我们可以将此计算属性添加到我们的 Controller 中。默认情况下,您很可能没有controller.js 文件。您可以使用 Ember-CLI 生成一个: ember g controller <route-name>

model传递给我们的 Controller ,我们可以添加一个过滤模型的计算属性:

// controller.js
routes: Ember.computed.filterBy('model', 'isNew', false)

这将是所有 route 的数组不"new"的记录。现在我们的 View 应该可以访问 routes .

//route.hbs
<form>
//some fields
//and a select-component:
{{my-select
selected=model.takeover
options=routes
}}
</form>

我不知道什么model.takover指。但如果你想得到 isNew 的记录您可以类似地过滤这些记录以仅返回新记录。

关于javascript - 避免展示新模型本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40258369/

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