ember.js - Emberjs 将对象添加到 ArrayController,服务器查询是不可

我正在尝试将对象添加到我的 Emberjs Arraycontroller。我有一个在按下按钮时触发的“创建” Action 。这工作正常,但我似乎无法将带有 this.pushObject 函数的元素添加到 ArrayController。我收到此错误消息:

Uncaught Error: The result of a server query (on App.Software) is immutable.  

我想这是因为我正在使用 RESTAdapter 加载数据,它不喜欢我手动添加元素?

这是我的 Controller 和创建操作。

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')
});

这是带有创建表单和软件列表的模板 View

<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">&times;</button>
    <strong>No software revisions found!</strong> start by creating a new revision above.
  </div>
  {{/if}}
</script>

有人知道将新对象添加到 ArrayController 存储的正确方法吗?谢谢!

顺便说一句,如果我改变路线,它就不会使用 RESTAdapter

App.SoftwareIndexRoute = Ember.Route.extend({
  setupController:function(controller){
    var product_id = 1;
    controller.set('content', []); // not using the RESTAdapter to load data
  }
});

最佳答案

我遇到了同样的问题。看起来从 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.js - Emberjs 将对象添加到 ArrayController,服务器查询是不可变的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16477310/

相关文章:

eclipse - 无法使用 sass-maven-plugin 编译 style.scss

r - R中代数关系的笛卡尔积表

vbscript - 使用 VBScript 获取 Mac 地址

django - 如何修复 Django 错误 : "' unicode' object has n

r - 哪些参数被传递给回溯中的函数?

javascript - 如何将事件监听器添加到对象数组

sql-server - 在 edmx 中重命名列的最佳方法是什么?

cassandra - Cassandra 是否是一个很好的候选数据库,因为它必须每秒支持超过 10

r - 为什么 na.omit 向空数据框添加一行?

find - 如何为大量文件添加标题(空/非空)