Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js Ember-如何仅在save()完成时插入记录_Ember.js_Ember Data - Fatal编程技术网

Ember.js Ember-如何仅在save()完成时插入记录

Ember.js Ember-如何仅在save()完成时插入记录,ember.js,ember-data,Ember.js,Ember Data,我有一个可以支持多种语言的应用程序。我的每个用户都有自己的一套“支持的语言”。假设我的用户支持英语、法语和西班牙语,他可以为他的店铺创建一个类别,他必须用3种语言输入名称。但是,当我显示类别列表时,我只想在标记中显示所选的语言名称 我在我的控制器中实现了以下功能,它工作得非常好: App.CategoryController = Ember.ObjectController.extend({ needs: ['settings'], currentLocale: Ember

我有一个可以支持多种语言的应用程序。我的每个用户都有自己的一套“支持的语言”。假设我的用户支持英语、法语和西班牙语,他可以为他的店铺创建一个类别,他必须用3种语言输入名称。但是,当我显示类别列表时,我只想在标记中显示所选的语言名称

我在我的控制器中实现了以下功能,它工作得非常好:

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”:)有时我会对当前使用的框架和语言感到困惑;-)