我有两个这样的关系的余烬模型
App.Foo = DS.Model.extend
bar: DS.belongsTo("App.Bar", embedded: true)
App.Bar = DS.Model.extend
primaryKey: "blah"
blah: DS.attr "string
Run Code Online (Sandbox Code Playgroud)
如果我创建并保存这样的新记录:
foo = App.store.createRecord App.Foo
foo.set "bar", App.Bar.createRecord(blah: "blahblah")
App.store.commit()
Run Code Online (Sandbox Code Playgroud)
我看到2个帖子请求到服务器:
URL: /foos
Payload: {"foo":{"bar":null}}
Run Code Online (Sandbox Code Playgroud)
和
URL: /bars
Payload: {"bar":{"blah":"blahblah"}}
Run Code Online (Sandbox Code Playgroud)
该关联是嵌入式的,所以我希望看到:
URL: /foos
Payload: {"foo":{"bar":{"blah":"blahblah"}}}
Run Code Online (Sandbox Code Playgroud)
我可以使用ember-data REST适配器实现这一点,还是需要编写自己的代码来执行此操作?
任何人对如何实现同时使用localStorage和REST远程存储的数据持久层有任何想法或参考:
某个客户端的数据与localStorage一起存储(使用ember-data indexedDB适配器).本地存储的数据与远程服务器同步(使用ember-data RESTadapter).
服务器从客户端收集所有数据.使用数学集符号:
Server = Client1 ? Client2 ? ... ? ClientN
Run Code Online (Sandbox Code Playgroud)
通常,任何记录对某个客户来说可能不是唯一的:
ClientX ? ClientY ? 0, ? X,Y ? [1,N]
Run Code Online (Sandbox Code Playgroud)
以下是一些场景:
客户创建记录.无法在客户端上设置记录的ID,因为它可能与存储在服务器上的记录冲突.因此,需要将新创建的记录提交到服务器 - >接收id - >在localStorage中创建记录.
记录在服务器上更新,因此localStorage和服务器中的数据不同步.只有服务器知道,所以架构需要实现推送架构(?)
您是否会使用2个存储(一个用于localStorage,一个用于REST)并在它们之间同步,或者使用混合索引的DB2/REST适配器并在适配器中写入同步代码?
你能看到任何避免实现推送的方法(Web Sockets,...)?
Ember Objects和Ember Data之间有什么区别?我知道当服务器上有一些数据时我应该使用Ember Data模型,但是我应该在何时何地使用它们?
让我们说
Post = DS.Model.extend({
comments: DS.hasMany({async: true})
})
Comment = DS.Model.extend({
post: DS.belongsTo()
})
Run Code Online (Sandbox Code Playgroud)
并且我必须使用该links功能,否则由于对帖子的评论过多而导致414错误.
自此提交https://github.com/emberjs/data/commit/4d717bff53f8c93bedbe74e7965a4f439882e259
似乎不可能触发post.get('comments')的重新加载,即发送GET请求,例如post/42/comments.
那有什么解决方案吗?
我需要一次性将一个深层对象保存到服务器,并且无法在线找到任何使用最新ember数据(1.0.0-beta.4)的示例.
例如,使用这些模型:(jsfiddle)
App.Child = DS.Model.extend({
name: DS.attr('string'),
age: DS.attr('number'),
toys: DS.hasMany('toy', {async:true, embedded:'always'}),
});
App.Toy = DS.Model.extend({
name: DS.attr('string'),
child: DS.belongsTo('child')
});
Run Code Online (Sandbox Code Playgroud)
这段代码:
actions: {
save: function(){
var store = this.get('store'),
child, toy;
child = store.createRecord('child', {
name: 'Herbert'
});
toy = store.createRecord('toy', {
name: 'Kazoo'
});
child.set('toys', [toy]);
child.save();
}
}
Run Code Online (Sandbox Code Playgroud)
它只保存子对象的JSON,但不保存任何玩具 - 甚至没有侧载:
{
child: {
age: null
name: "Herbert"
}
}
Run Code Online (Sandbox Code Playgroud)
我是否还必须手动保存玩具?无论如何,我可以让它将以下JSON发送到服务器:
{
child: {
age: null
name: "Herbert",
toys: [{
name: "Kazoo"
}]
} …Run Code Online (Sandbox Code Playgroud) 有没有人用ember-data建模数据树?
我会假设它会是这样的:
Node = DS.Model.extend({
children: DS.hasMany(Node),
parent: DS.belongsTo(Node)
});
Run Code Online (Sandbox Code Playgroud)
然而,我无法得到这个工作,导致相信:或者我在如何设置它,或者2)目前无法使用ember建模树是完全错误的-数据.
我希望它是前者而不是后者......
当然它可能是JSON ......我假设JSON应该是这样的形式:
{
nodes: [
{ id: 1, children_ids: [2,3], parent_id: null },
{ id: 2, children_ids: [], parent_id: 1 },
{ id: 3, children_ids: [], parent_id: 1 }
]
}
Run Code Online (Sandbox Code Playgroud)
任何有关此问题的提示/建议将不胜感激.
我正在使用ember.js创建我的第一个项目,到目前为止还没有找到任何使用新路由系统的示例项目.来自ember文档的所有示例都使用旧路由.
另外,我很想看到一个使用Ember Data的项目示例,如果有人知道的话.
谢谢!
如何在呈现URL /#/ persons/1时,获取以下示例代码,不仅可以呈现人员数据,还可以呈现该人员的电话号码.我试着通过电话号码循环,{{#each phoneNumber in phoneNumbers}}但我必须有一个基本的理解错误.
现在我只得到:

app.js
App = Ember.Application.create({
LOG_TRANSITIONS: true,
rootElement: '#container'
});
// Router
App.Router.map(function() {
this.resource('persons', function() {
this.resource('person', { path: ':person_id' });
});
this.resource('phoneNumbers', function() {
this.resource('phoneNumber', { path: ':phone_number_id' });
});
});
App.PersonsRoute = Ember.Route.extend({
model: function() {
return App.Person.find();
}
});
App.PhoneNumbersRoute = Ember.Route.extend({
model: function() {
return App.PhoneNumber.find();
}
});
// Models
App.Store = DS.Store.extend({
revision: 11,
adapter: 'DS.FixtureAdapter'
});
App.Person = DS.Model.extend({
firstName: DS.attr('string'),
lastName: DS.attr('string'),
phoneNumbers: DS.hasMany('App.PhoneNumber') …Run Code Online (Sandbox Code Playgroud) 基于另一个属性为当前控制器重新加载模型的最佳方法是什么?
例如:我有一个帖子控制器.作者只能有一个帖子.如果currentAuthor属性发生更改,我想重新加载post创建表单.
我试过这样的方式:
App.PostEditController = Ember.ObjectController.extend
modelReloadNeeded: Ember.observer((obj, keyName) ->
postId = @get('currentAuthor').get('post_id')
if postId?
@set('model', @store.find('post', postId))
, 'currentAuthor.post_id'
)
Run Code Online (Sandbox Code Playgroud)
它重新加载所有东西,但不是真正的模型,而是承诺.而且它看起来不像是一个惯用的Ember解决方案.
也许有更好的方法来解决这个问题?
我试图将ember-models链接到ember-table以从服务器中提取分页记录,并在向下滚动时将它们添加到表中.
我可以通过在http://addepar.github.io/ember-table/上的ajax示例中请求我的api url来获取它的工作,但我无法弄清楚如何将它与ember-model集成以创建和ember对象,然后将它们添加到表中.
这是我的代码,只是发出ajax请求并添加到表.任何人都可以告诉我如何改变这个使用ember-model/ember-data代替.
App.TableAjaxExample = Ember.Namespace.create()
App.TableAjaxExample.LazyDataSource = Ember.ArrayProxy.extend
createGithubEvent: (row, event) ->
row.set 'id', event.id
row.set 'name', event.name
row.set 'isLoaded', yes
requestGithubEvent: (page) ->
content = @get 'content'
start = (page - 1) * 30
end = start + 30
per_page = 40
# something like this ???
#App.Detail.find(type: 'companies', page: page, per_page: per_page).on 'didLoad', ->
url = "http:/myurl.dev/admin/details.json?type=companies&page=#{page}&per_page=30"
Ember.$.getJSON url, (json) =>
json.details.forEach (event, index) =>
row = content[start + index]
@createGithubEvent row, event
[start...end].forEach …Run Code Online (Sandbox Code Playgroud) ember-data ×10
ember.js ×10
javascript ×3
rest ×2
ember-1 ×1
ember-model ×1
ember-table ×1
json ×1