Ember.js Ember-如何仅在save()完成时插入记录
我有一个可以支持多种语言的应用程序。我的每个用户都有自己的一套“支持的语言”。假设我的用户支持英语、法语和西班牙语,他可以为他的店铺创建一个类别,他必须用3种语言输入名称。但是,当我显示类别列表时,我只想在标记中显示所选的语言名称 我在我的控制器中实现了以下功能,它工作得非常好:Ember.js Ember-如何仅在save()完成时插入记录,ember.js,ember-data,Ember.js,Ember Data,我有一个可以支持多种语言的应用程序。我的每个用户都有自己的一套“支持的语言”。假设我的用户支持英语、法语和西班牙语,他可以为他的店铺创建一个类别,他必须用3种语言输入名称。但是,当我显示类别列表时,我只想在标记中显示所选的语言名称 我在我的控制器中实现了以下功能,它工作得非常好: App.CategoryController = Ember.ObjectController.extend({ needs: ['settings'], currentLocale: Ember
App.CategoryController = Ember.ObjectController.extend({
needs: ['settings'],
currentLocale: Ember.computed.alias('controllers.settings.currentLocale'),
name: function() {
var translations = this.get('category_translation_ids').filterBy('locale', this.get('currentLocale'));
Ember.assert("The selected language does not exist", translations.length === 1);
return translations[0].get('name');
}.property('category_translation_ids.@each.name')
});
我的问题是在添加新类别时:
App.CategoriesAddController = Ember.ObjectController.extend({
needs: ['categories', 'settings'],
newRecord: function() {
scope = this;
record = this.store.createRecord( 'category',
{
active: true,
})
record.save().then(function(record) {
scope.get('controllers.settings').get('supportedLocale').forEach(function(item, index, enumerable) {
translation = scope.get('store').createRecord( 'categoryTranslation',
{
locale: item,
name: 'Nom',
description: '',
meta_description: ''
});
record.get('category_translation_ids').pushObject(translation);
translation.save();
});
});
},
});
一旦我执行了“createRecord”,我的类别就被创建,并且计算属性“name”无法执行,因为我还没有插入翻译。我不知道我是否做得对,因为这是我在恩伯的第一个项目。在过去的4-5个小时里,我一直在解决这个问题,但没有取得多大成功。任何帮助都将不胜感激 听起来好像您有一个显示所有类别的模板,该类别的项目控制器是
CategoryController
。可能是这样的:
{{#each category in controller}}
{{category.name}}
{{/each}}
我敢肯定,当控制器试图在控制器上计算name
时,它会崩溃。有几种方法可以实现这一点,一种是在类别不是新的情况下进行过滤
{{#each category in controller}}
{{#unless category.isNew}}
{{category.name}}
{{/unless}}
{{/each}}
您也可以根据记录的状态进行筛选,尽管这种情况经常发生变化,并且存在过多的不同状态。我不确定是否完全理解您的问题,但需要了解的是,
save()
实际上返回了一个承诺。因此,如果您需要在保存完成后执行某些操作,只需调用save()。然后(function(){…})
。实际上,使用“newRecord”可能更好而不是依赖id。过去我遇到过一些问题,有时即使记录还没有保存,id也会出现。我不确定我是否知道任何名为newRecord
的内置属性/状态,但我在上个月没有太多的余烬数据,请随意启发id
是一种通常可以处理它的方法,我想如果您在客户端创建id,这是很少见的,那么它就不起作用了。您还可以在对象上设置属性,然后在保存记录后将其删除,将具有该属性的记录从循环中排除。对不起,是的,我的意思是“isNew”:)有时我会对当前使用的框架和语言感到困惑;-)