我正在页面中显示使用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映射以解决此类情况?
我有一个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) 有没有人想出多态关联和余烬数据的答案?
我们需要一些能够从我所知道的方式查询关系另一端的类型的方法.
有人对此有何看法?
我有一个ArrayController,其内容在这样的路由中定义:
App.UsersRoute = Ember.Route.extend({
model: function() {
return App.User.find();
},
setupController: function(controller, model) {
this._super(controller, model);
this.controllerFor('application').set('currentRoute', 'users');
}
});
Run Code Online (Sandbox Code Playgroud)
我在模板中列出数据:
<ul>
{{#each user in arrangedContent}}
<li>
{{user.lastName}} {{user.firstName}}
{{#linkTo "users.edit" user class="btn btn-primary btn-small"}}EDIT{{/linkTo}}
</li>
{{/each}}
</ul>
Run Code Online (Sandbox Code Playgroud)
它工作正常.
如果我创建一个新项目,它会自动添加到模板中的列表中:
App.UsersNewRoute = Ember.Route.extend({
model: function() {
return App.User.createRecord({firstName: '', lastName: ''});
}
});
Run Code Online (Sandbox Code Playgroud)
但是当我在"编辑"视图中删除某个项目时,它不起作用:
App.UsersEditController = Ember.ObjectController.extend({
...
destroy: function() {
this.get('content').deleteRecord();
this.get('store').commit();
this.transitionToRoute("users.index");
}
});
Run Code Online (Sandbox Code Playgroud)
但是在"新"视图中,如果我删除了新创建的项目,它就可以工作(没有提交).
在编辑控制器中,如果我删除"提交",则列表会更新,但当我执行其他操作时,将重新加载列表,并重新显示已删除的项目(正常).
那么,如何删除项目?
注意:我使用ember和ember-data的"master"代码,刚刚刷新.
Ember数据仍未达到版本1.0,因此我决定使用Ember而不使用Data模型.
我有自己的模型,这些模型由路径模型函数创建.
但是,保持前端对象和后端对象之间的状态是一场噩梦.特别是当一条路线使用其他路线模型时.
我正在做最好的做法,还是我应该采取不同的做法?我的直觉是,如果不使用Ember Data,我应该写自己的商店.我很乐意收到你们中的一些人的反馈.
模型示例:
App.Person = Ember.Object.extend(App.Serializable,Em.Copyable,{
user_email : null //used in routing dynamic segements and as old email when making changes to email
,first_name: null
, last_name: null
, fullname : function () {
return this.first_name + ' ' + this.last_name;
}.property('first_name','last_name').cacheable()
};
App.Person.reopenClass({
createRecord: function(data) {
return App.Person.create({
user_email : data.email
, first_name: data.first_name
, last_name : data.last_name
}});
Run Code Online (Sandbox Code Playgroud)
我如何加载类模型的示例:
App.UsersRoute = App.AuthenticatedRoute.extend( {
model : function () { …Run Code Online (Sandbox Code Playgroud) 我试图用Ember和Ember Data做一些非常基本的事情.
1)帖子属于用户; 用户有很多帖子
2)在创建新的Post表单中,我想要选择/下拉所有用户
3)当我编辑帖子(使用相同的表单)时,我想将其正确绑定回dropbox
问题:执行与用户列表绑定的下拉列表的最佳做法是什么?如何绑定编辑表单以再次填充下拉列表?
用户模型:
App.User = DS.Model.extend({
posts: DS.hasMany('post', {async: true}),
});
Run Code Online (Sandbox Code Playgroud)
邮政模式:
App.Post = DS.Model.extend(Ember.Validations.Mixin, {
user: DS.belongsTo('user', {async: true}),
});
Run Code Online (Sandbox Code Playgroud)
创建新的职位表格:
{{view Em.Select
content=users <<<<< How do I bind this.store.find("user") here?
optionValuePath='content.id'
optionLabelPath='content.name'
}}
Run Code Online (Sandbox Code Playgroud)
我不明白将选择内容与用户绑定的最佳做法.
尝试1:
*我使用的是Ember-Form
{{em-select
property="user_id"
label="user"
prompt="Select user:"
content=controllers.users.content
optionValuePath="content.id"
optionLabelPath="content.first_name"
}}
Run Code Online (Sandbox Code Playgroud)
在保存操作上:
newItem.set('user', this.store.getById('user', this.get('user_id')));
Run Code Online (Sandbox Code Playgroud)
我尝试使用user_id作为表单的属性,并在保存时转换回用户对象以分配给帖子.但是,这种方法有点愚蠢,因为我每次保存时都会主动将user_id转换为用户对象.我觉得应该有一种方法可以自动完成,如果我做了正确的绑定,而不是跳过箍来绑定属性user_id.当我使用相同的表单编辑帖子时,这也使我很难绑定回来.由于已经建立了所有的关系,我觉得我在这里做错了.我认为必须有更好的方法.
谢谢!
我试图让我的余烬模型使用远程rails api.我试过扩展DS.RESTAdapter,但我不知道如何告诉模型使用这些设置.我的模型永远不会到达localhost:3000.
//app.js
import Ember from 'ember';
import Resolver from 'ember/resolver';
import loadInitializers from 'ember/load-initializers';
Ember.MODEL_FACTORY_INJECTIONS = true;
var App = Ember.Application.extend({
modulePrefix: 'friend-ember-app', // TODO: loaded via config
Resolver: Resolver
});
App.ApplicationAdapter = DS.RESTAdapter.extend({
host: 'localhost:3000',
namespace: 'api/v1'
});
loadInitializers(App, 'friend-ember-app');
export default App;
Run Code Online (Sandbox Code Playgroud)
//
//models/event.js
import DS from 'ember-data';
export default DS.Model.extend({
title: DS.attr('string'),
description: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
//
// controllers/index.js
import Ember from 'ember';
export default Ember.Controller.extend({
columns: function(){
//Attempting to see request to remote api
var events …Run Code Online (Sandbox Code Playgroud) 我有一些需要运行的代码store.init.
我尝试扩展默认存储app/store.js,ember-cli似乎把它当作商店,但是对象this.store不是商店
我的店铺定义:
import DS from 'ember-data';
export default DS.Store.extend({
init:function(){
console.log('watatLoL')
}
});
Run Code Online (Sandbox Code Playgroud) 在这个问题的那一刻,我正在运行最新的Ember和Ember Data版本.

我正在使用DS.RESTAdapter调用/places这种方式:
this.store.findAll('place');
Run Code Online (Sandbox Code Playgroud)
该模型只有一个名称属性name: DS.attr('string')
JSON如下:
{
places: [
{
id: 1,
name: "San Francisco"
},
{
id: 2,
name: "Havana"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我制作了模板并使用了相应的each,所有内容都显示出来并且到目前为止工作但是我得到了一个弃用警告,告诉我们:
弃用:当存储中至少有一个"目标"记录时,shouldReloadAll的默认行为将在Ember Data 2.0中更改为始终返回false.如果您想保留当前行为,请覆盖适配器中的shouldReloadAll:application并返回true.
我不确切知道什么是解决此警告的最佳方法.我是新来的,所以任何进一步的解释都没问题.提前致谢.