gpt4 book ai didi

ember.js - 使用 Ember-Data 1.0.0-beta 的临时非持久记录

转载 作者:行者123 更新时间:2023-12-02 09:12:34 25 4
gpt4 key购买 nike

我是 Ember 和 Ember-data 的新手,正在决定是否使用 Ember-Data 还是其他持久性库之一。为了进行评估,我正在尝试编写一个小型的 Rails 支持的应用程序。

我的路线之一可以被认为类似于示例中经常使用的 Todo MVC 应用程序。

在我的模板中,我有许多表示模型内属性的输入字段。此外,我在模型中还有一个表示 hasMany 关系的元素。

型号:

App.CompanyModel = DS.Model.extend
company: DS.attr()
desc: DS.attr()
contacts: DS.hasMany('company_contact')

App.CompanyContactModel = DS.Model.extend
firstname: DS.attr()
lastname: DS.attr()
...

在我的 Controller 中,我希望能够创建一个新的 CompanyModel 记录(并通过向其中添加一个或多个联系人模型),但在我准备好之前不要让它出现在 Controller 的 CompanyModel 实例中这样做。

目前,当用户想要添加新记录时,我有一个组件在我的 Controller 中调用一个操作,如下所示:

@set('new_company',
@store.createRecord('company')
)

这实际上工作得很好,除了一件事。我的 View 必须填充“new_company”中的各个属性,但是,记录会立即添加到 Controller 的模型实例中并显示在记录列表中;我只希望在发生特定操作后新创建的记录在表中可见。

我可以这样做,而不是使用 createRecord 实例化 new_company:

@set('new_company',
Ember.Object.create
companyname: ''
desc: ''
contacts: [
firstname: ''
lastname: ''
]
)

然后执行 @store.createRecord('company', @get('new_company')),但是,鉴于我已经在模型中定义了我的属性,对我来说它并不感觉很干燥。

我正在使用 Ember 1.5.0 和 Ember-Data 1.0.0-beta.7。

看来我不是第一个遇到此问题的人 ( create temporarty non persistent object in Ember-Data ),但 Ember-Data 似乎已经发生了足够的变化,导致所有这些解决方案都无法运行。

感谢您的帮助!

最佳答案

您真正的问题是您正在使用被视为实时集合的内容。我假设在你的 route 你做了这样的事情:

App.FooRoute = Em.Route.extend({
model: function(){
return this.store.find('company');
}
});
不带参数的

find 表示,嘿 Ember Data,为我找到公司的所有记录。那么 Ember Data 会向您的后端发出请求,然后返回 store.all('company')all 是一个实时集合,始终包含当前存储中该类型的所有记录。就您而言,您是说我想避免任何新记录。有几种方法可以处理这个问题。

创建静态列表。 (您需要手动向该列表添加/删除对象)。

App.FooRoute = Em.Route.extend({
model: function(){
return this.store.find('company').then(function(companies){
return companies.toArray();
});
}
});

示例:http://emberjs.jsbin.com/OxIDiVU/641/edit

创建一个仅显示非新记录的计算属性

App.FooRoute = Em.Route.extend({
model: function(){
return this.store.find('company');
}
});

App.FooController = Em.ArrayController.extend({
savedRecords: function(){
return this.get('model').filterBy('isNew', false);
}.property('model.@each.isNew')
// shorthand this could be written like this
// savedRecords: Ember.computed.filterBy('model', 'isNew', false)
});

然后在模板中您将迭代计算属性

{{#each item in savedRecords}}

{{/each}}

示例:http://emberjs.jsbin.com/OxIDiVU/640/edit

关于ember.js - 使用 Ember-Data 1.0.0-beta 的临时非持久记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24197419/

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