我希望我的Emberjs应用程序处理HTTP状态未授权(401).
该应用程序使用ember-data集成JSON API(Rails).
当接收HTTP状态未授权时,客户端层(Emberjs)应该重定向到提示登录的Emberjs视图/模板(401).
我怎样才能在整个应用程序中执行此操作?
从Ember.Data 1.0 Beta开始,我们必须使用store.find('model')而不是App.Model.find().如何访问App对象中的商店对象?
var App = Ember.Application.create({
auth: function() {
return new Ember.RSVP.Promise(function(resolve, reject) {
// ... get token somehow ...
// how to get store?
this.store.find('user').then(function(users) {
App.set('user', users.get('firstObject');
resolve();
}, function(err) {
reject();
});
});
}
});
App.deferReadiness();
App.auth().then(App.advanceReadiness());
Run Code Online (Sandbox Code Playgroud) 我有以下两种型号:
App.Child = DS.Model.extend({
name: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
和:
App.Activity = DS.Model.extend({
children: DS.hasMany('child',{async:true}),
name: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
我想使用复选框在hasMany关系中在现有子节点之间进行选择.
例如,我有这三个孩子:
App.Child.FIXTURES = [
{ id: 1, name: 'Brian' },
{ id: 2, name: 'Michael' },
{ id: 3, name: 'James' }
];
Run Code Online (Sandbox Code Playgroud)
用户应该能够在创建或编辑活动时使用复选框,以选择要添加到hasMany关系的子项.
我创建了一个JSFiddle来说明我的问题:http://jsfiddle.net/Dd6Wh/.点击"创建新活动"以查看我正在尝试执行的操作.
基本上它与Ember.Select [...] multiple ="true"相同,但是对于复选框.
对于像Ember.js这样的事情,正确的方法是什么?
我正在尝试使用Ember Data的hasMany字段来返回一个数组,并将数组中的项计数作为计算属性.但是,当我执行以下操作时,它会返回一个对象(由于{async:true}似乎是一个promise)?而不是我期望的数组.
App.Shift = DS.Model.extend({
name: DS.attr('string'),
people: DS.hasMany('person', {async: true});
number_of_people: (function(){
this.get('people').length
}).property('people')
)};
App.Person = DS.Model.extend({
first_name: DS.attr('string'),
last_name: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
更新:我想回报人的长度.我试过这个但是当我访问该属性时,我得到了仍然返回的promise对象,而不是当时返回的完成promise的值.如何获得承诺返回的评估值?
number_of_people: (function(){
return this.get('people').then(function(people){
return people.get('length');
});
})
Run Code Online (Sandbox Code Playgroud) 我正在使用Ember App Kit.我有一个带有学生姓名的表单,我可以毫无问题地将数据保存到数据库中.问题是,每当我http://localhost:8000/#/students/new从另一个页面转换回此路径()时,数据(学生姓名)就会保留在表单上.如果我刷新屏幕,那么数据将被清除,我将获得一个新的表格.我究竟做错了什么?
此外,如果我决定不保存或添加记录并去查看学生列表,我会在屏幕上看到一个空记录.但该记录不在数据库中.我怎么能防止这种情况?
//--------------------------------------------
// Controller
var StudentsNewController = Ember.ObjectController.extend({
init: function() {
var newSystem = this.store.createRecord('student');
this.set('newStudent', newStudent);
this._super();
},
actions: {
acceptChanges: function () {
var self = this;
self.get('newStudent').save().then(function(student){
self.transitionToRoute('students');
});
}
}
});
export default StudentsNewController;
//--------------------------------------------
// Model
var Student = DS.Model.extend({
name: DS.attr('string'),
major: DS.belongsTo('major')
});
export default Student;
//--------------------------------------------
// Template
<form {{action 'updateSystem' on="submit"}}>
<fieldset>
<div>
<label>Student Name</label>
{{input value=newStudent.name size="50"}}
</div>
<button {{action 'acceptChanges'}}>Add</button>
</fieldset>
</form>
Run Code Online (Sandbox Code Playgroud) 我真的希望来自emberjs团队的人能够读到这一点.
我是一位经验丰富的程序员,使用多种语言.
&AFA ember关注的是,它不是学习曲线,也不是缺乏知识和教程,而是我认为它的框架和开发环境的来源不断变化,消耗了大量的时间,精力和精力,试图当各种SO问题和谷歌引用框架的不同/旧版本时,弄清楚出了什么问题.
我发现需要某种配置图表,其中包含什么以及如何配置您的开发环境是必要的.
有很多答案并不一定指向正确的方向,很难描述,但我觉得文档在框架向前运行时落后了.
我浏览了所有JoséMota的精彩教程,在构建实际书签应用程序的最后阶段,我遇到了很多问题,学习emberjs不是主要问题,而是大部分时间消耗的基础设施.
它从ruby版本开始,在ubuntu 12.04上管理这些,ruby的ember-data依赖项(仅用ruby 1.9编译),localstorage_adapter.js以及如何在ember中使用它... github页面上给出的示例不起作用.
配置:
ubuntu 12.04.4 ember 1.4.1 + pre.af87bd20 jquery-1.9.1 handlebars-v1.3.0 ember-data 1.0.0-beta.7.f87cba88 ruby 1.9.2p290
继何塞·莫塔的伟大tutsplus当然 因此,这里是我的问题:
Error while loading route: TypeError: undefined is not a function
at App.BookmarksNewRoute.Ember.Route.extend.model (http://localhost:8000/js/app/routes/bookmarks_new.js:3:23)
at superWrapper [as model] (http://localhost:8000/js/vendor/ember.js:1239:16)
Run Code Online (Sandbox Code Playgroud)
应用程序代码(我会尽量明确):
路线
filename:bookmarks_new.js
App.BookmarksNewRoute = Ember.Route.extend({
model: function() {
return App.Bookmark.createRecord();
}
Run Code Online (Sandbox Code Playgroud)
})
楷模
filename:bookmark.js
App.Bookmark = DS.Model.extend({
title: DS.attr("string"),
url: DS.attr("string")
Run Code Online (Sandbox Code Playgroud)
})
filename:router.js
App.Router.map(function () {
this.resource("bookmarks", function(){ …Run Code Online (Sandbox Code Playgroud) 我需要Ember在调用REST端点时停止尝试猜测,但找不到这样做的方法.
如果我有一个端点说,/services我想要总是打电话给/services我,无论我是打电话find('services')还是打电话find('services', 1)
单面相同.
是否可以禁用此行为?即使我必须覆盖REStAdapter中的方法也没问题.
谢谢!
模型:
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
关于根据长度实现计算属性的任何其他建议
我已将Ember-data更新为1.0.0-beta.19,现在store.find('events')解决了promise返回DS.INTERNALMODEL实例,而不是DS.MODEL.使用Ember-data 1.0.0-beta.18它运行正常.有任何想法吗?
UPDATE
最后,我发现我的应用程序代码中的某个地方使用的是Ember数据内部代码store.find('events.content'),导致异常.调试器没有那么有用的跟踪它,但删除这个修复了我的问题.
因此,Ember数据模型具有在不将其提交到后端deleteRecord()的destroyRecord()情况下执行的功能。
我该怎么做save(),而不将其提交到后台?
我需要它的原因是,我正在使用自定义服务在一个请求中批量保存多个不同类型(模型)的记录。我已成功发送请求,并且记录保留在后端。
但是由于请求没有通过Ember Data管道,因此除非我手动处理,否则服务器的响应将被丢弃。
基本上,我在服务中有此功能:
// Accepts an array of records of mixed types,
// both existing and new
batchSave (records) {
this
.customAjax(records) // The records are persisted
.then(payload => { // Response from the backend with updated records
store.pushPayload(payload); // Now all records have been updated with their current state
// Now all the records are in their current state.
// But they are still dirty!
// How do I mark …Run Code Online (Sandbox Code Playgroud) ember-data ×10
ember.js ×9
javascript ×3
arrays ×1
login ×1
rest ×1
ruby ×1
ubuntu-12.04 ×1
web ×1