标签: ember-data

我的Rails路由应该与pushState Ember.js路由一起使用?

简而言之...

在构建Ember.js应用程序以持久化到Rails应用程序时,我应该如何处理Rails路由/视图?我认为我只需要Rails来呈现application.html.erb布局,以便Ember.js应用程序初始化并处理路由/视图/模板.

细节:

具体来说,如果我访问localhost:3000,在我的Ember.js应用程序有机会初始化之前,Rails会在项目控制器上执行"索引"操作.它会抱怨缺少索引模板.我没有index.html.erb视图,因为我的Ember.js应用程序有一个视图/模板.

我应该为Rails应用程序创建空白视图吗?我的Rails控制器操作应该返回一些东西以防止它呈现视图吗?或者我希望构建正常的Rails视图以与Ember.js应用程序视图/模板一起使用?

如果我创建一个空白的projects/index.html.erb并访问localhost:3000,Rails将呈现它,Ember.js将从那时开始初始化并处理路由.但是,如果我直接访问localhost:3000/projects/new,Rails会抱怨项目控制器中没有新操作.我对Rails端的项目控制器没有"新"操作,因为我不需要它.我的Ember.js应用正在处理该视图/模板.

最后,我只是不确定在Rails应用程序旁边使用Ember.js的约定.

感谢您的帮助,并阅读此...

编辑:

我遗漏了我试图使用Ember.js路由器使用pushState历史记录的能力的细节.这将留给我非hashbang URL.这就是为什么我遇到处理Rails竞争路由我的应用程序的问题的原因之一.

Rails应用程序布局:

<html> 
<body>   
  <section id="design-archive"></section>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Ember.js App:

@DA = Em.Application.create
  name: 'Design Archive'
  VERSION: '0.1'
  rootElement: '#design-archive'
  ApplicationController: Em.Controller.extend()
  ApplicationView: Em.View.extend
    templateName: 'application'

DA.initialize(DA.Router)
Run Code Online (Sandbox Code Playgroud)

Rails路线:

DesignArchive::Application.routes.draw do
  resources :clients, :only => [:new, :create, :index, :show, :destroy]
  resources :projects, :only => [:new, :create, :index, :show, :destroy]

  root :to => 'projects#index'
end
Run Code Online (Sandbox Code Playgroud)

Ember.js路线:

DA.Router = Em.Router.create
  location: …
Run Code Online (Sandbox Code Playgroud)

routes ruby-on-rails ember.js ember-data

10
推荐指数
2
解决办法
3885
查看次数

Ember-Data:如何使用`DS.Adapter.findHasMany`

UPDATE

请注意,此问题适用于Ember Data pre-1.0 beta,通过URL加载关系的机制在1.0 beta之后发生了显着变化!


我回过头问了一个更长的问题,但自从那时候图书馆发生了变化,我会问一个更简单的版本:

你怎么用的DS.Adapter.findHasMany?我正在构建一个适配器,我希望能够加载get关系属性的关系内容,这看起来像是这样做的方式.但是,看看Ember数据代码,我看不出如何调用这个函数(如果需要,我可以在评论中解释).

我的后端没有一种简单的方法可以在我发送的JSON中的属性键中包含一个id数组 - 我正在使用的序列化器不允许我在任何好的地方挂钩以改变它,它也将是计算上很昂贵.

曾几何时,Ember Data首页显示了这个"延迟加载"的例子......这是可能的,还是路径图中列出的"处理部分加载的记录",还不能完成.?

我是1月15日的API修订版11,主分支.

更新

好的,以下几乎是有效的.首先,我findHasMany根据测试用例的实现在我的适配器中创建了以下方法:

findHasMany: function(store, record, relationship, details) {
    var type = relationship.type;
    var root = this.rootForType(type);
    var url = (typeof(details) == 'string' || details instanceof String) ? details : this.buildURL(root);

    this.ajax(url, "GET", {
        success: function(json) {
            var serializer = this.get('serializer');
            var pluralRoot = serializer.pluralize(root);
            var hashes = json[pluralRoot]; //FIXME: Should call some serializer method to get this?
            store.loadMany(type, …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

10
推荐指数
1
解决办法
3787
查看次数

10
推荐指数
3
解决办法
2108
查看次数

EmberJS/Ember-Data:404没有被抓住

我试图在我的ember应用程序中捕获404错误,并重定向到/not-found.

我对我有一个errors动作ApplicationController,我也有一个RSVP.on('error')功能,但404不会被抓住.我刚刚从jQuery向我的控制台抛出了404错误,但错误没有传递给错误处理程序.

控制台错误

错误初始化程序:

import Ember from 'ember';

var initialize = function(container) {
  var errorReporting = container.lookup("service:errorReporting");

  Ember.RSVP.on('error', function(err) {
    Ember.warn("Ember.RSVP error..... Logging error:");
    console.log(err);
    if (err.name && err.name === 'TransitionAborted') {
      Ember.debug("TransitionAborted error. Doesn't look like we should be catching these.");
    } else {
      container.lookup('route:application').send('error', err);
    }
  });

  window.onerror = function(err) { // window general errors.
    Ember.warn("Uncaught error (tripped window.onerror)..... Logging error:");
    console.log(err);
    errorReporting.report(err);
  };

};

export default {
  name: 'errors',
  initialize: …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

10
推荐指数
1
解决办法
1565
查看次数

Ember-data和MongoDB,如何处理_id

我正在使用带有rails和MongoDB的ember-data,并且对于在MongoDB中存储ID的方式存在问题 - 在_id字段中.

Ember-data将使用id作为ID的默认字段,所以我试图像这样覆盖它:

App.User = DS.Model.extend
    primaryKey: "_id"
    name: DS.attr "string"
    image: DS.attr "string"
Run Code Online (Sandbox Code Playgroud)

这似乎在大部分时间都有效,但在某些情况下,我从ember说得到例外:

未捕获错误:断言失败:您的服务器返回带有密钥_id的哈希,但您没有映射

我怀疑这可能是ember-data中的一个错误,因为它仍处于开发阶段,但是我试图找到一种方法来将_id映射到服务器端的id中?我正在使用mongoid来进行mongo映射.

ruby-on-rails mongodb mongoid ember.js ember-data

9
推荐指数
2
解决办法
4154
查看次数

使用ember-data find()和多个参数返回单个记录

我试图在其他参数上进行查找(使用余烬数据)而不是id,实际上是两个参数.

但我回来的是:

"Uncaught Error: assertion failed: Your server returned a hash with the key customer but you have no mappings".
Run Code Online (Sandbox Code Playgroud)

在代码中挖掘之后,我看到find方法在给定哈希时委托给findQuery方法,这会创建一个DS.AdapterPopulatedRecordArray,但我只在我的json中返回一个客户对象:

{"customer":{
"id":24857,"name":"Kim Fransman","id_number":"XXXX","email":"email@domain.com","type":"Person"}}
Run Code Online (Sandbox Code Playgroud)

我可以通过将json包装在customers数组中并在我的Handlebars视图中循环遍历来解决这个问题,但这感觉非常错误.

今天有没有办法用ember-data做到这一点?

ember.js ember-data

9
推荐指数
1
解决办法
2609
查看次数

Ember Data对删除记录的期望是什么?

我正在使用带有rails后端的RESTful适配器的Ember Data.

当我从灰烬中删除记录record.deleteRecord(); record.save()DELETE请求转到服务器和模型将被删除,但这个错误打印到JavaScript控制台:

Extract requested, but no data given for App.ThisModel. This may cause weird problems.
Run Code Online (Sandbox Code Playgroud)

来自服务器的响应是render json: true,所以我将其更改为render json: deleted_model渲染已删除记录的json.

这摆脱了以前的错误,但现在删除的记录在Ember中重新创建.

Ember在回复中期望什么?

ruby-on-rails ember.js ember-data

9
推荐指数
2
解决办法
3131
查看次数

测试一个余烬数据模型 - 无法找到关系

我试图在ember-cli应用程序中测试模型关系,但它一直告诉我:没有找到'rateType'的模型.它似乎无法找到我的模型.

~app/models/account.js
~app/models/rate-type.js
Run Code Online (Sandbox Code Playgroud)

帐户模型

export default DS.Model.extend({
    ...
    rateType: DS.belongsTo('rateType'),
});
Run Code Online (Sandbox Code Playgroud)

测试

import Ember from 'ember';
import { test, moduleForModel } from 'ember-qunit';
import Account from 'app/models/account';
import RateType from 'app/models/rate-type';

moduleForModel('account', 'Account Model', {
  // Specify the other units that are required for this test.
  needs: ['model:rate-type']
});

test('rateType relationship', function() {
    expect(0);
    this.subject(); //error here
//    var relationships = Ember.get(Account, 'relationships');
//    deepEqual(relationships.get('rate-type'), [
//        { name: 'rateType', kind: 'belongsTo' }
//    ]);
});
Run Code Online (Sandbox Code Playgroud)

我试过驼峰套管的需要属性但是根本不喜欢它. …

ember.js ember-data ember-cli ember-qunit

9
推荐指数
2
解决办法
1642
查看次数

如何使用EmberJS在路由中加载belongsTo/hasMany关系

在我的EmberJS应用程序中,我显示了一个约会列表.在AppointmentController中的一个动作中,我需要获得约会所有者,但是所有者总是返回"undefined".

我的文件:

车型/ appointment.js

import DS from 'ember-data';

export default DS.Model.extend({
    appointmentStatus: DS.attr('number'),
    owner: DS.hasMany('person'),
    date: DS.attr('Date')
});
Run Code Online (Sandbox Code Playgroud)

车型/ person.js

import DS from 'ember-data';

export default DS.Model.extend({
    name: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)

模板/ appointmentlist.js

{{#each appointment in controller}}
    <div>
        {{appointment.date}} <button type="button" {{action 'doIt'}}>Do something!</button>
    </div>
{{/each }}
Run Code Online (Sandbox Code Playgroud)

控制器/ appointmentlist.js

export default Ember.ArrayController.extend({
    itemController: 'appointment'
});
Run Code Online (Sandbox Code Playgroud)

控制器/ appointment.js

export default Ember.ObjectController.extend({
    actions:{
        doIt: function(){
            var appointment = this.get('model');
            var owner = appointment.get('owner'); //returns undefined
            //Do something with owner
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

现在,我知道我可以将owner-property更改为 …

ember.js ember-data

9
推荐指数
1
解决办法
9503
查看次数

Ember Data不允许hasMany关系中的重复条目

我有以下型号:

#order/model.coffee
Order = DS.Model.extend {
  line_items: DS.hasMany 'product', {async: true}
}
Run Code Online (Sandbox Code Playgroud)

在某些时候,我想将一些产品添加到订单中.我发现我只能添加一次产品,再添加相同的产品不起作用:

#product/route.coffee
...
actions:
    # Not actually my code but illustrates the problem
    addToCart: (product1, product2)->
      order = @modelFor 'order'
      console.log order.get('line_items.length') # prints 0

      order.get('line_items').pushObject product1
      console.log order.get('line_items.length') # prints 1

      order.get('line_items').pushObject product2
      console.log order.get('line_items.length') # prints 2

      order.get('line_items').pushObject product1
      console.log order.get('line_items.length') # prints 2

      order.get('line_items').pushObject product2
      console.log order.get('line_items.length') # prints 2


      ...
Run Code Online (Sandbox Code Playgroud)

问题是用户可能不止一次需要单个项目.表示该方法的最简单方法是使数组具有重复条目.看来Ember并没有让我为关系这样做.如何在关系中多次添加模型?

javascript ember.js ember-data

9
推荐指数
1
解决办法
494
查看次数