5

我正在尝试使用 Emberjs 和 ember-data 将新记录发布到 Rails db;但是我收到以下错误:

TypeError {}“无法调用未定义的方法‘hasOwnProperty’”

我一直在关注https://github.com/dgeb/ember_data_example的示例,并尝试使用与示例相同的概念构建自己的应用程序。更不用说,我用过调试器;在我的控制器中,当我在控制台中点击this.get('preLoadedData')时,它设法将我的输入获取到表单中。但是,问题是我无法将用户输入发布到 Rails DB 中。

代码是:

店铺

DS.RESTAdapter.configure("plurals", {"company_category": "company_categories"});
  App.Adapter = DS.RESTAdapter.extend({
    bulkCommit: false
});

App.Store = DS.Store.extend({
  revision: 12,
  adapter: DS.RESTAdapter.create()
});

模型

App.CompanyCategory = DS.Model.extend({
    category:   DS.attr("string")
});

控制器

App.CompanyCategoriesNewController = Em.ObjectController.extend({

    startEditing: function() {
        this.transaction = this.get('store').transaction();
        this.set('model', this.transaction.createRecord(App.CompanyCategory, {}));
    },

    save: function() {
        this.transaction.commit();
        this.transaction = null;
    }
});

导轨下控制器:-

def create
    @category = CompanyCategory.new(params[:id])
    respond_to do |format|
      if @category.save
        format.json { render json: @category, status: :created, location: @category }
      else
        format.json { render json: @category.errors, status: :unprocessable_entity}
      end
    end
  end

路由器

App.CompanyCategoriesNewRoute = Em.Route.extend({
   model: function() {
       return null;
   },

   setupController: function(controller) {
       this._super.apply(this,arguments);
       controller.startEditing();
   }
});

当我调用App.CompanyCategory.find();时我的 JSON 输出 是:

{
   "company_categories":[
           {"id":1,"category":"Financial Services"},
           {"id":2,"category":"Trade Services"}
   ]
}

我可以知道我做错了什么吗?提前致谢!

4

1 回答 1

0

这里有几件事,让控制器设置自己的模型被认为是不好的做法。相反,路由器的工作是为控制器提供模型。所以按照ember的做事方式,你应该是这样做的:

App.CompanyCategoriesNewRoute = Em.Route.extend({
   model: function() {
    return this.get('store').createRecord(App.CompanyCategory, {});
   },

  setupController: function(controller, model) {
    controller.set('content', model);
  }
});

App.CompanyCategoriesNewController = Em.ObjectController.extend({


    startEditing: function() {
       this.set('transaction', this.get('store').transaction());
       this.get('transaction').add(this.get('model'));
   },

   save: function() {
     this.get('transaction').commit();
  }

});

于 2014-03-09T14:59:25.297 回答