我有一个项目模型,每个项目可以有很多项目.这可以是很多层次.
我有这个jsfiddle http://jsfiddle.net/rmossuk/xmcBf/3/
如何更改此项以便能够拥有多个级别的项目,以及如何循环显示每个级别以显示它们?
我还需要能够订购每个项目子项并将该命令存储到服务器.
请有人能告诉我你怎么做到这一点?
更新:
我现在已经设法实现了这个问题,可以在很多层面深入探讨这个问题,请看http://jsfiddle.net/rmossuk/fBmmS/3/
但我需要一种方式来说明每个项目的顺序,并按顺序显示它们.目前它只显示itemIds数组中的子项,但这只用于关联目的,我不能改变它重新排序可以吗?
有人知道怎么做吗 ?
非常感谢瑞克
我有一个UserSession模型定义如下:
App.UserSession = DS.Model.extend({
authToken: attr('string'),
firstName: attr('string'),
lastName: attr('string')
});
Run Code Online (Sandbox Code Playgroud)
当用户登录时,我正在向后端发出AJAX POST请求,返回JSON表示,例如:
{
"user_session": {
"id": 1,
"auth_token": "token_here",
"first_name": "John",
"last_name": "Doe"
}
}
Run Code Online (Sandbox Code Playgroud)
现在通常,如果我要执行以下操作,Ember Data将负责自动序列化JSON并添加对象:
App.UserSession.find(<session-id>);
Run Code Online (Sandbox Code Playgroud)
当我正在进行手动AJAX调用时,是否有一种简单的方法可以将JSON返回到Ember数据存储对象中而无需手动反序列化?
编辑清晰:
以下不起作用,但我希望找到一些能够完成上述操作的功能,这些功能可能类似于下面的调用.
App.UserSession.load(<session-json>);
Run Code Online (Sandbox Code Playgroud) 我在渲染模型的'hasMany'部分时遇到了麻烦.我似乎对这个人有类似的问题,但我仍然无法弄清楚该怎么做.
这是相关的JS:
App.Router.map(function() {
this.resource('account', function() {
this.resource('transaction', {
path: '/transaction/:transaction_id'
});
});
});
App.AccountIndexRoute = Ember.Route.extend({
model: function() {
return App.Account.find();
}
});
App.TransactionRoute = Ember.Route.extend({
model: function() {
return App.Transaction.find();
}
});
App.Store = DS.Store.extend({
revision: 12,
adapter: 'DS.FixtureAdapter'
});
App.Account = DS.Model.extend({
title: DS.attr('string'),
transactions: DS.hasMany('App.Transaction')
});
App.Account.FIXTURES = [
{
id: 1,
title: 'Your account',
transactions: [1, 2, 3]
}];
App.Transaction = DS.Model.extend({
date: DS.attr('date'),
name: DS.attr('string'),
amount: DS.attr('number'),
paidWith: DS.attr('string'),
account: DS.belongsTo('App.Account')
}); …Run Code Online (Sandbox Code Playgroud) 我一直在努力理解这个概念,而且我花了很多时间研究这个,但我已经无处可去了.
我在便宜的主机(one.com)上有一个MYSQL数据库.我在所说的数据库中创建了一个表,现在我希望我的Ember应用程序从中获取所有条目.
我该如何做到这一点?据我了解,ember-data尝试从特定项URL获取信息..但是如何使用相应的URL映射我的数据库条目?
我不能直接在服务器上安装任何软件,因为我没有它.但是支持PHP.使用PHP我可以轻松检索所有数据库条目并使用ember-data请求的正确格式将它们编码为JSON,但我不知道下一步该做什么.
App = Ember.Application.create();
// data storage -----------------------------------------------------
App.Store = DS.Store.extend({
revision: 12,
adapter: DS.RESTAdapter.create({
url: 'http://www.myurl.com/blog'
})
});
// routers, routes --------------------------------------------------
App.Router.map(function() {
this.resource('contact');
this.resource('items', { path: "/items/" });
this.resource('item', { path: "/items/:item_id"});
this.resource('hearts');
this.resource('tags');
});
App.IndexRoute = Ember.Route.extend({
redirect: function() {
this.transitionTo('items');
}
});
App.ItemsRoute = Ember.Route.extend({
model: function() {
return App.Item.find();
}
});
App.ItemRoute = Ember.Route.extend({
model: function(params) {
return App.Item.find(params.item_id);
}
});
// controllers --------------------------------------------------------
App.ItemsController = Ember.ArrayController.extend({
// ...
}); …Run Code Online (Sandbox Code Playgroud) 我尝试将我的应用程序emberjs版本从1.0.0 rc8更新为1.0.0但我得到路由错误.在我的应用程序路由我有这些代码:
OlapApp.ApplicationRoute = Ember.Route.extend({
setupController: function (controller, model) {
this.controllerFor('column').set('model', OlapApp.AxisModel.find());
this.controllerFor('row').set('model', OlapApp.AxisModel.find());
},
renderTemplate: function (controller, context) {
this._super(controller, context);
this.render('application');
this.render('column', {
into: 'application',
outlet: 'column',
controller: 'column'
});
this.render('row', {
into: 'application',
outlet: 'row',
controller: 'row'
});
},
dimenssionTree: function () {
return OlapApp.MeModel.find();
}
});
Run Code Online (Sandbox Code Playgroud)
并得到此错误:
DEPRECATION: Action handlers contained in an `events` object are deprecated in favor of putting them in an `actions` object (error on <OlapApp.ApplicationRoute:ember314>)
at Object.triggerEvent (file:///F:/OLAP/app/lib/ember.js:30519:13)
at trigger (file:///F:/OLAP/app/lib/ember.js:29641:16)
at …Run Code Online (Sandbox Code Playgroud) 我有一个api端点,需要/在它的末尾,但Ember不添加/.有没有办法编辑RESTAdapter创建的URL,以便添加此斜杠?
目前URL ember发送的是 http://www.myapi.com/v1/roles
我需要URL看起来像这样: http://www.myapi.com/v1/roles/
这是我目前的ApplicationAdapter:
import DS from 'ember-data';
export default DS.RESTAdapter.extend({
ajaxError: function() {
console.log('error');
},
host: 'http://www.myapi.com',
namespace: 'v1'
});
Run Code Online (Sandbox Code Playgroud)
这是我的路由器:
import Ember from 'ember';
export default Ember.Route.extend({
model: function(params) {
return this.store.find('role');
}
});
Run Code Online (Sandbox Code Playgroud) 嘿,我需要修改一些从DataStore获取的记录.如果我在路由器中添加以下代码,我可以看到请求传递给我的模板,但我无法修改集合的每个请求,因为集合是空的.
model() {
return this.store.findAll('user').then(function(users) {
console.log(users.get('length')); // 0
return users;
});
}
Run Code Online (Sandbox Code Playgroud)
我认为当从服务器获取所有记录时,promise会得到解决,但事实并非如此.或者我完全错过了什么.
我还尝试使用相同的结果修改afterModel回调中的模型.
我正在使用Ember 1.13.0(使用Ember-CLI),Ember-Data 1.13.4和ember-cli-mirage来模拟我的HTTP请求.
更新: 我设法为此问题创建了一个解决方法.在我的控制器中,我创建了一个新属性,它监听模型.@ each然后我能够修改模型并将其传递给视图.
export default Ember.Controller.extend({
users: function() {
return this.get('model.users').filter(function(user) {
// The Promise is resolved twice
// The first time with an empty model and the second time with
// the actual data. So I filter the empty model.
return user.get('id');
}).map(function(user) {
// do fancy stuff with our user
return user
});
}.property('model.@each')
});
Run Code Online (Sandbox Code Playgroud) 我有一个使用EmbeddedRecordsMixin的余烬数据模型。
使用model.save()正确序列化包括嵌入式记录在内的有效负载。
我需要将模型手动序列化为javascript对象。我该怎么做呢?
当我创建一个记录const myRecord = this.store.createRecord('myType', myObject),然后myRecord.save()请求通过适配器发送到服务器.数据已成功保存,服务器将所有数据返回给客户端.它通过序列化器返回,通过normalize()钩子.
问题是Ember不会myRecord使用从服务器返回的属性更新对象,例如id或version...
当我刷新页面时,所有属性都在那里(当然).
我有更新记录的类似问题.我的应用程序中的每条记录都有一个版本属性,由服务器检查.每次保存时都会增加版本.这是为了数据安全.问题是,当我尝试多次更新记录时,只有第一次尝试成功.原因是version请求从服务器返回后未更新.(是的,服务器返回更新版本)
这对我来说是一个令人惊讶的行为,在我看来,这似乎是这里建议的预期功能 - https://github.com/ebryn/ember-model/issues/265.(但该帖子是从2013年开始的,建议的解决方案对我不起作用).
有任何想法吗?
对于completenes,这是相关代码(简化和重命名)
基于myModel
export default Ember.Model.extend({
typedId: attr('string') // this serves as an ID
version: attr('string'),
name: attr('string'),
markup: attr('number'),
});
Run Code Online (Sandbox Code Playgroud)
myAdapter
RESTAdapter.extend({
createRecord(store, type, snapshot) {
// call to serializer
const serializedData = this.serialize(snapshot, options);
const url = 'http://some_internal_api_url';
// this returns a promise
const result = this.ajax(url, 'POST', serializedData);
return result;
}, …Run Code Online (Sandbox Code Playgroud) 所以我是Ember的新手(使用ember-cli 3.0.4),并试图了解如何对我做什么是正常的事情.我在组件内部有一个表单,用户更新信息,然后单击"保存".我已经构建了一个动作,组件在单击"保存"按钮时调用该动作,并且该动作在模型对象上调用save().到现在为止还挺好.
我的问题是,当save()promise完成时,我想重定向到另一个页面.我无法弄清楚如何做到这一点.动作的emberjs指南并没有提到重定向,只有路由模块似乎提到了重定向.
显然,有一种"苦恼"的做事方式,我还不知道,但到目前为止,我无法弄清楚那是什么.在Ember中保存完成之后,简单的重定向如何?
组件代码:
export default Component.extend({
actions: {
saveCountry() {
var self = this;
if (this.country.get('hasDirtyAttributes')) {
this.country.save().then(
//???
);
}
}
}
Run Code Online (Sandbox Code Playgroud)
路线代码:
export default Route.extend({
model(params) {
return this.get('store').findRecord('country', params.country_id);
}
});
Run Code Online (Sandbox Code Playgroud)
谢谢!