我在一些控制器和路由中使用了一些自定义的AJAX请求,例如:
var loginRoute = Ember.Route.extend({
actions: {
submitLogin: function(user, pass) {
var data = { username: user, password: pass };
Ember.$.post('http://192.168.2.10/api/v1/login', data).then();
}
}
});
Run Code Online (Sandbox Code Playgroud)
这工作正常,但在开发时我可能有一个不同的IP(例如更改路由器),我希望能够访问我在扩展RESTAdapter时定义的URL(主机+命名空间),这样我只需要更改host和/或namespace一次,而不是我做自定义ajax请求的每个地方.
App.ApplicationAdapter = DS.RESTAdapter.extend({
host: 'http://192.168.2.10',
namespace: 'api/v1'
});
Run Code Online (Sandbox Code Playgroud) 模型:
DS.Model.extend({
title: DS.attr('string'),
body: DS.attr('string'),
comments: DS.hasMany('comment', { async: true} ),
hasComments: Ember.computed.gt('comments.length', 0)
});
Run Code Online (Sandbox Code Playgroud)
有效载荷:
{
"id": "abcdefg",
"title": "some cats are cool",
"body": "",
"comments: ["100", "101", "102"]
}
Run Code Online (Sandbox Code Playgroud)
但是hasComments计算属性会单独触发每个注释的提取.我不希望这样:D
我知道这有效(避免了获取),但进入私有API:
hasComments: Ember.computed.gt('data.comments.length', 0)
ember.js 1.8.1
ember-data 1.0.0-beta.11
关于根据长度实现计算属性的任何其他建议
我已经确定了一些我想看看是否有人可以解释的行为.
我在这里做了一个jsfiddle http://jsfiddle.net/iceking1624/PpWec/17/.要测试行为,请打开Web控制台,只需在"添加问题"按钮旁边的文本字段中键入内容,然后单击按钮("添加问题").
以下是DS.Model架构:
App.Session = DS.Model.extend({
"questions" : DS.hasMany('App.Question') ,
"firstQuestion" : DS.belongsTo('App.Question')
});
App.Question = DS.Model.extend({
"session" : DS.belongsTo('App.Session'),
"choices" : DS.hasMany('App.Choice'),
"text" : DS.attr('string')
});
App.Choice = DS.Model.extend({
"session" : DS.belongsTo('App.Session'),
"question" : DS.belongsTo('App.Question'),
"text" : DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
当我在里面执行以下操作SessionController然后调用该addQuestion函数:
App.SessionController = Ember.ObjectController.extend({
addQuestion: function() {
var sessionModel = this.get('model');
var question = App.Question.createRecord({
"session" : sessionModel
});
this.get('questions').pushObject(question)
}
});
Run Code Online (Sandbox Code Playgroud)
我得到以下'错误'但它仍然按预期运行:
错误:断言失败:您在App.Question上定义了"会话"关系,但在App.Session上找到了App.Question类型的多个可能的反向关系.
现在我想出来是因为里面App.Session我有两个引用的字段App.Question:
"questions" : DS.hasMany('App.Question') …Run Code Online (Sandbox Code Playgroud)