我正在使用ember.js-pre3 ember-data revision 11构建项目管理应用程序.
如何初始化几个控制器并使其在全局范围内可用.例如,我有一个currentUser控制器和usersController,我需要访问每个州.我以前在Ember.ready函数中有以下代码,但它不再有效.我想我这样做是为了调试.https://github.com/emberjs/ember.js/issues/1646
老路:
window.Fp = Ember.Application.create
ready: () ->
# Initialize Global collections
appController = @get 'router.applicationController'
store = @get 'router.store'
# User controller sets usersController binding on applicationController
# fetches all team users from server
# json returned from server includes flag "isCurrent"
usersController = @get 'router.usersController'
usersController.set 'content', store.findAll(Fp.User)
appController.set 'usersController', usersController
# CurrentUserController
# sets currentUserController binding on applicationController
# finds currentUser from usersController
currentUserController = @get 'router.currentUserController'
currentUserController.set 'content', usersController.get('findCurrentUser')
appController.set 'currentUserController', …Run Code Online (Sandbox Code Playgroud) 我正在使用一个在POST/PUT谓词中需要这样的JSON的Web服务:
{
"id":"CACTU",
"companyName": "Cactus Comidas para llevar",
"contactName": "Patricio Simpson",
"contactTitle": "Sales Agent",
"address": "Cerrito 333",
"city": "Buenos Aires",
"postalCode": "1010",
"country": "Argentina",
"phone": "(1) 135-5555",
"fax": "(1) 135-4892"
}
Run Code Online (Sandbox Code Playgroud)
但是Ember Data发送了一个这样的JSON:
{
"customer":
{
"id":"CACTU",
"companyName": "Cactus Comidas para llevar",
"contactName": "Patricio Simpson",
"contactTitle": "Sales Agent",
"address": "Cerrito 333",
"city": "Buenos Aires",
"postalCode": "1010",
"country": "Argentina",
"phone": "(1) 135-5555",
"fax": "(1) 135-4892"
}
}
Run Code Online (Sandbox Code Playgroud)
如何在发送POST/PUT操作时删除"customer"根元素?
有没有办法轻松地将更改恢复为Ember Data模型?
我有一个绑定到编辑视图的模型.此视图使用户可以取消编辑,此时我想将更改还原为模型.有没有一种简单的方法可以在不克隆所有值的情况下执行此操作?
让我们说我的rails模型看起来像这样:
class SalesRelationship < ActiveRecord
end
Run Code Online (Sandbox Code Playgroud)
这是由crossSell继承的,如下所示:
class crossSell < SalesRelationship
end
Run Code Online (Sandbox Code Playgroud)
如何在ember-data中显示此继承关系.这是什么最好的做法:
App.salesRelationship = DS.Model.extend({
name: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
我可以像这样创建一个名为'crossSell'的子类
crossSell = App.salesRelationship({
productName: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
或者像这样
App.salesRelationship.crossSell = DS.Model.extend({
productName: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud) 如何在ember-data中处理奇异资源?假设我有以下RESTful路由:
GET /cart
POST /cart
UPDATE /cart
DELETE /cart
Run Code Online (Sandbox Code Playgroud)
ember-data期望find()返回一个数组,并且它会自动尝试复数我传递给我的模型的任何url.处理这种情况的最佳方法是什么?
我有这两个模型:
App.Items = DS.Model.extend({
provider: DS.attr('string'),
name: DS.attr('string'),
description: DS.attr('string'),
});
App.Baskets = DS.Model.extend({
selectedItems: DS.hasMany('App.Items'),
name: DS.attr('string'),
username: DS.attr('string'),
})
Run Code Online (Sandbox Code Playgroud)
现在我想要做的是当用户选择它时将新项目添加到篮子.我试过这样做:
basket = App.Baskets.find(1);
item = App.Items.find(1);
basket.set("selectedItems", item) ;
App.store.commit();
Run Code Online (Sandbox Code Playgroud)
这不会返回任何错误,但它不会触发对服务器的任何请求.
或者,我试过这个:
basket = App.Baskets.find(1);
selectedItems = basket.get("selectedItems")
selectedItems.pushObject(App.Items.find(1))
App.store.commit();
Run Code Online (Sandbox Code Playgroud)
此方法返回错误:
Uncaught TypeError: Cannot call method 'indexOf' of undefined ember.js:1691
get ember.js:1691
DS.OneToManyChange.sync ember-data.js:4572
(anonymous function) ember-data.js:424
OrderedSet.forEach ember.js:1410
DS.ManyArray.DS.RecordArray.extend.arrayContentDidChange ember-data.js:423
newFunc ember.js:1167
Ember.ArrayProxy.Ember.Object.extend.arrangedContentArrayDidChange ember.js:10600
sendEvent ember.js:3792
Ember.Array.Ember.Mixin.create.arrayContentDidChange ember.js:7933
Ember.Mixin.create.replace ember.js:11011
Ember.ArrayProxy.Ember.Object.extend.replaceContent ember.js:10476
DS.ManyArray.DS.RecordArray.extend.replaceContent ember-data.js:351
newFunc ember.js:1167
Ember.ArrayProxy.Ember.Object.extend.replace …Run Code Online (Sandbox Code Playgroud) 我正在页面中显示使用Ember Data RESTAdapter获取的文章列表.我需要实现一个bootstrap'esque paginator(参见:http://twitter.github.com/bootstrap/components.html#pagination),并且似乎无法找到一个合理的模式来返回分页数据,如页数,文章数,当前页面,在单个请求中.
例如,我希望API返回类似于:
{
articles: [{...}, {...}],
page: 3,
article_count: 4525,
per_page: 20
}
Run Code Online (Sandbox Code Playgroud)
一个想法是添加App.Paginator DS.Model,因此响应可能如下所示:
{
articles: [{...}, {...}],
paginator: {
page: 3,
article_count: 4525,
per_page: 20
}
}
Run Code Online (Sandbox Code Playgroud)
但是这对于一些如此微不足道的东西来说,这似乎有些过分.有没有人解决过这个问题或者找到了他们喜欢的特定模式?是否有一种简单的方法来管理RESTAdapter映射以解决此类情况?
过去几天我一直在用主键和最后一个版本的Ember Data 苦苦挣扎.
我首先阅读了如何在GitHub上的Breaking Changes文件中执行此操作,但它显然已经过时了.我尝试了 其他 几种方法(借助Peter Wagenet在IRC上的帮助),但它们似乎都没有用.
我想slug在我的模型上制作我的主键,而且由于我正在使用MongoDB,我想用_id而不是id.
有没有人想出怎么做?我的根本问题是当我App.MyModel.find()在模型上做几个时,模型记录被加载两次.
我有一个User模型,它具有纬度和经度属性,用于显示地图上的当前用户位置.
App.User = DS.Model.extend({
firstName: DS.attr('string'),
lastName: DS.attr('string'),
email: DS.attr('string'),
jobs: DS.hasMany("App.Job"),
latitude: DS.attr('number'),
longitude: DS.attr('number'),
measuredAt: DS.attr('date'),
});
Run Code Online (Sandbox Code Playgroud)
每隔给定间隔从服务器自动更新纬度和经度属性的最佳方法是什么?ember-data是否支持这种用例?我找不到具有此功能的任何样品.我想我需要在其中使用setInterval覆盖User类的find方法,这是正确的方法吗?
谢谢
生成示例应用程序后:
ember new preloadtest
cd preloadtest/
ember g instance-initializer preload
ember g model test-data
ember g route index
ember g adapter application
Run Code Online (Sandbox Code Playgroud)
使用以下文件:
型号/测试data.js
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
value: DS.attr( 'number' )
});
Run Code Online (Sandbox Code Playgroud)
路线/ index.js
import Ember from 'ember';
export default Ember.Route.extend({
model(){
return this.store.peekAll( 'test-data' );
}
});
Run Code Online (Sandbox Code Playgroud)
实例的初始化/ preload.js
export function initialize( appInstance ) {
let store = appInstance.lookup( 'service:store' );
store.pushPayload( { "testDatas": [
{ "id": 1, "name": "aaa", "value": 1},
{ …Run Code Online (Sandbox Code Playgroud)