Ember.js 在向ArrayController添加对象时,服务器查询是不可变的
我正在尝试将对象添加到我的Emberjs Arraycontroller。我有一个“创建”操作,当按下按钮时触发。这很好,但我似乎无法将带有This.pushObject函数的元素添加到ArrayController。我收到以下错误消息:Ember.js 在向ArrayController添加对象时,服务器查询是不可变的,ember.js,Ember.js,我正在尝试将对象添加到我的Emberjs Arraycontroller。我有一个“创建”操作,当按下按钮时触发。这很好,但我似乎无法将带有This.pushObject函数的元素添加到ArrayController。我收到以下错误消息: Uncaught Error: The result of a server query (on App.Software) is immutable. 我想这是因为我使用RESTAdapter加载数据,而不是手动添加元素 这是我的控制器和创建操作 Ap
Uncaught Error: The result of a server query (on App.Software) is immutable.
我想这是因为我使用RESTAdapter加载数据,而不是手动添加元素
这是我的控制器和创建操作
App.SoftwareIndexController = Ember.ArrayController.extend({
sortProperties: ['revision'],
create:function(){
var revision = $('#software_revision').val();
var doc = $('#software_document').val();
var software = App.Software.createRecord({
product_id: 1,
revision: revision,
doc: doc
});
this.pushObject(software);
}
});
这是路线
App.SoftwareIndexRoute = Ember.Route.extend({
setupController:function(controller){
var product_id = 1;
controller.set('content', App.Software.find({product_id:1}));
}
});
这是模型和商店
App.Store = DS.Store.extend({
revision: 12,
adapter: 'DS.RESTAdapter'
});
DS.RESTAdapter.configure("plurals", {
software: "software"
});
App.Software = DS.Model.extend({
revision: DS.attr('string'),
doc: DS.attr('string'),
verified: DS.attr('boolean')
});
下面是模板视图,其中包含创建表单和软件列表
<script type="text/x-handlebars" data-template-name="software/index">
<p>
<fieldset>
<legend>Create a new software revision</legend>
<label for="software_revision">Revision</label>
<input id="software_revision" name="software_revision" type="text" placeholder="">
<label for="software_document">Document ID</label>
<input id="software_document" name="software_document" type="text" placeholder="">
<button class="btn btn-success" {{action create}}>Create</button>
</fieldset>
</p>
{{#if length}}
<table class="table">
<thead>
<tr>
<th>Revision</th>
<th>Created</th>
</tr>
</thead>
<tbody>
{{#each controller}}
<tr>
<td>{{revision}}</td>
<td>{{createdAt}}</td>
</tr>
{{/each}}
</tbody>
</table>
{{else}}
<div class="alert alert-info">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>No software revisions found!</strong> start by creating a new revision above.
</div>
{{/if}}
</script>
我也有同样的问题。看起来从App.Software.find()返回的内容是一个不可变数组。我可以通过获取返回可变数组的不可变数组的内容来解决这个问题 例如: 在ember 1.0.0+ember data 1.0.0 beta 3中:
this.store.find('software').then(function (softwares) {
controller.set('content', softwares.get('content'));
});
这只是一个猜测,但对于您在发帖时使用的版本:
controller.set('content', App.Software.find().get('content'));
我还没有测试它,但您可以尝试使用
Ember.MutableArray
mixin:DS.model.extend(Ember.MutableArray,{…})扩展您的App.Software
模型
并查看您是否获得了功能谢谢您的建议。我尝试扩展模型,使其成为:App.Software=DS.model.extend(Ember.MutableArray,{
但我收到了相同的不可变错误消息可能这有助于这看起来很时髦。您的控制器应该自动加载新记录,而不必将它们推入。您可以尝试在路由中使用model
功能来代替setupController
吗?
controller.set('content', App.Software.find().get('content'));