2

我的路由器定义了以下内容:

this.resource('uoms', { path: '/uoms' }, function() {
    this.route('new');
});

uoms路线定义为:

App.UomsRoute = Ember.Route.extend({
    model: function() {
        return this.store.find('uom');
    },

    actions: {
        save: function() {
            this.modelFor('uoms').save().then(function() {
                console.log("saved UOMs");
            });
        }
    }
});

但是由于某种原因,当我尝试保存它时,我得到:

未捕获的类型错误:对象 [对象对象] 没有方法“保存”

有人可以帮我确定我做错了什么吗?

- - 更新 - -

我还从控制器尝试了以下操作,但结果相同:

App.UomsController = Ember.ArrayController.extend({
    actions: {
        save: function() {
            this.get('model').save().then(function() {
                console.log("saved UOMs");
            });
        }
    }
});

---- 更新 2 ----

查看调用返回的对象,this.get('model')我们得到以下信息:

4

2 回答 2

2

这就是我要做的:

  • 使用 Chrome 开发人员工具在您尝试保存模型的行设置断点
  • 要检查控制器持有的模型,请进入this.get('model')Chrome 开发者工具控制台。

检查控制台输出是否真的是您所期望的。很可能它不是您要保存的模型实例。您将看到this.get('model').save()在控制台中执行时会收到相同的错误。

顺便说一句:你为​​什么使用 anArrayController而不是ObjectController. 看起来您将它用于单个模型。有关详细信息,请参阅文档。

编辑:

尝试this.get('model').get('transaction').commit()

于 2013-09-25T14:38:57.823 回答
1

我遇到的问题是我试图调用save()一组记录而不是单个记录。之所以会出现这个问题,是因为我在单个记录上进行操作,但在ArrayController. 我不认为这有什么问题,尽管可以说我应该创建一个名为“编辑”的子路由,然后大概我的代码逻辑会起作用。

也就是说,如果你想像我一样做(也就是在 ArrayController 中保存一条单数记录),那么这段代码就可以工作:

save: function(id) {
    var promise = this.store.find('uom',id).then(function(uom){
        console.log(uom);
        uom.save();
    });
}

然后在模板中放入如下内容:

<span class="glyphicon glyphicon-floppy-disk" {{action "save" id}}></span>

这有效,但不是最佳答案。相反,您可以在带有属性的ArrayControlleran中指定。下面是使用此策略的 a和handler的示例:ObjectControlleritemControllersave()deleteRecord()

App.PluralController = Ember.ArrayController.extend({
    itemController: 'singular'
});

App.SingularController = Ember.ObjectController.extend({
    actions: {
        save: function() {
            this.get('model').save();
        },
        deleteRecord: function() {
            this.get('model').deleteRecord();
            this.get('model').save();
        }
    }
});

然后,您需要为您的车把模板执行以下操作:

<span class="glyphicon glyphicon-floppy-disk" {{action "save" this}}></span>
<span class="glyphicon glyphicon-remove-circle" {{action "deleteRecord" this}}></span>
于 2013-09-25T18:49:20.133 回答