我有一个纯REST rails后端,我正在使用Ember.JS在客户端工作我明白ember-data用于REST通信,但我发现它甚至不在生产中有没有人知道它何时会准备好?
或者,如果有更好的解决方案可以使用?
我正在努力让我的模型的夹具数据渲染到我的模板,当我在模板中尝试每个循环时,我收到上面的错误:
{{#each}}
{{title}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)
我已经设置了我的路由器:
Application.Router.map(function() {
this.resource('application', { path: '/' });
});
Application.ApplicationRoute = Ember.Route.extend({
model: function() {
return this.store.find('applicationmodel');
}
});
Run Code Online (Sandbox Code Playgroud)
我的模型设置如下:
Application.ApplicationModel = DS.Model.extend({
title: DS.attr('string')
});
Application.ApplicationModel.FIXTURES = [
{
id: 1,
title: 'title-1'
},
{
id: 2,
title: 'title-2'
}
];
Run Code Online (Sandbox Code Playgroud)
谁能告诉我我做错了什么?
谢谢
isDirty模型上的-flag表示一个或多个属性已更改但未保存到服务器,但是是否可以针对特定属性进行检查?
像这样: model.isPropertyDirty('name')
(同样的文字也在EmberJS讨论区开放)
我有以下路线:
App.IndexCrmPersonEditRoute = Ember.Route.extend({
model: function(params) {
var person = this.store.find("person", params.id);
return person;
},
});
Run Code Online (Sandbox Code Playgroud)
它接收以下路由器路径
...
this.route('edit', { path: ':id'}); // edit person
...
Run Code Online (Sandbox Code Playgroud)
这适用于现有人.当对象不存在时,API返回404,其中包含以下内容:
{"person": null}
Run Code Online (Sandbox Code Playgroud)
JS中发生错误" 加载路径时出错:未定义 ".
我想知道返回404 + person = null是否是正确的方法,并且是否可以显示消息并将用户重定向回上一个URL(如果响应为404,甚至不移动它们).
任何的想法?
我有一个控制器处理模型列表.这些模型有两种不同的类型(例如Message和Comment).为了使用ArrayController我必须将两个列表合并为一个.有没有办法做到这一点 ?
这个线程中提出的基于类的多态性将解决我的问题,但它们不太可能很快实现.
在我目前的解决方案,我用一个ObjectControllerreveiving都comments和messages.然后我使用计算属性合并它们:
App.SomeRoute = Ember.Route.extend({
model: function (params) {
return Em.Object.create({
comments: this.store.find('comment'),
messages: this.store.find('message'),
});
},
});
App.SomeIndexController = Ember.ObjectController.extend({
merged: Em.computed.union('messages', 'comments'),
});
Run Code Online (Sandbox Code Playgroud)
它有效,但我没有受益于所有的细节ArrayController(sortProperties例如).
我想做的是:
App.SomeRoute = Ember.Route.extend({
model: function (params) {
var comments = this.store.find('comment');
var messages = this.store.find('message');
return merge(comments, messages);
},
});
Run Code Online (Sandbox Code Playgroud)
其中merge返回类似的是什么东西回来this.store.find('model').
我是Ember和Ember数据的新手,我决定是使用Ember-Data还是其他一个持久性库.为了评估,我正在尝试编写一个小型的Rails支持的应用程序.
我的其中一条路线可以被认为类似于在示例中经常使用的Todo MVC应用程序.
在我的模板中,我有许多输入字段,表示模型中的属性.此外,我在模型中还有一个表示hasMany关系的元素.
楷模:
App.CompanyModel = DS.Model.extend
company: DS.attr()
desc: DS.attr()
contacts: DS.hasMany('company_contact')
App.CompanyContactModel = DS.Model.extend
firstname: DS.attr()
lastname: DS.attr()
...
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我希望能够创建一个新的CompanyModel记录(并且为此添加一个或多个联系人模型),但是在我准备这样做之前,它不会出现在控制器的CompanyModel实例中. .
目前,当用户想要添加新记录时,我有一个在我的控制器中调用操作的组件,如下所示:
@set('new_company',
@store.createRecord('company')
)
Run Code Online (Sandbox Code Playgroud)
除了一件事,这实际上工作正常.我的视图必须填充"new_company"中的各个属性,但是,记录会立即添加到控制器的模型实例中并显示在记录列表中; 我只希望在特定操作发生后,新创建的记录在表格中可见.
我没有用createRecord实例化new_company,而是可以这样做:
@set('new_company',
Ember.Object.create
companyname: ''
desc: ''
contacts: [
firstname: ''
lastname: ''
]
)
Run Code Online (Sandbox Code Playgroud)
然后做一个@ store.createRecord('company',@ get('new_company')),但是,鉴于我已经在模型中定义了我的属性,它对我来说感觉不是很干.
我使用的是Ember 1.5.0和Ember-Data 1.0.0-beta.7.
看来我不是第一个遇到这个问题的人(在Ember-Data中创建临时非持久性对象),但似乎Ember-Data已经充分改变,使所有这些解决方案无法运行.
谢谢你的帮助!
我尝试了一个简单的应用程序,但我很困惑,因为什么时候在控制器中使用模型钩子,什么时候去路由模型钩子.以此为例(使用EmberCLI):
模板(templates/discovery.hbs)
{{#each model}}
<tr>
<td>
Q: {{ques}}
</td>
</tr>
{{/each}}
Run Code Online (Sandbox Code Playgroud)
所以我可以用以下两种方式定义模型
**第一路(路线/ discovery.js)**
import Ember from "ember";
export default Ember.Route.extend({
model : function(){
return this.store.all('questions') ;
}
});
Run Code Online (Sandbox Code Playgroud)
这与预期一样,所有类型问题的记录都传递并在discovery.hbs模板中显示.
第二种方式(controllers/discovery.js)
import Ember from "ember";
export default Ember.ArrayController.extend({
model : function(){
return this.store.all('questions') ;
}
});
Run Code Online (Sandbox Code Playgroud)
所以预计这将像以前一样(至少我预期它),但这并没有显示任何记录.那么如果我在路线或控制器中定义模型有什么区别?什么应该是首选?
我正在尝试为我的Ember应用程序编写一个验收测试,当涉及到PhantomJS和Ember测试服务器时,我似乎遇到了一些问题.
我正在运行以下版本:
Ember : v1.13.6
Ember Data : v1.13.7
Run Code Online (Sandbox Code Playgroud)
PhantomJS失败,出现以下错误:
Died on test #1 at http://localhost:7357/assets/test-support.js:2934
at http://localhost:7357/assets/test-support.js:6640
at http://localhost:7357/assets/test-loader.js:31
at http://localhost:7357/assets/test-loader.js:21
at http://localhost:7357/assets/test-loader.js:40
at http://localhost:7357/assets/test-support.js:6647: Can't find variable: DS
Run Code Online (Sandbox Code Playgroud)
这是一个已知的问题?
测试在镀铬转轮内运行良好.
这是我的ember-cli-build.js(Brocfile):
/* global require, module */
var EmberApp = require('ember-cli/lib/broccoli/ember-app');
module.exports = function(defaults) {
// Build Options
var options = {
// Build for development (ember s)
development: {
sassOptions: {
includePaths: ['bower_components/materialize/sass']
}
},
// Build for deployments
dev_deploy: {
sassOptions: {
includePaths: ['bower_components/materialize/sass']
},
fingerprint: { …Run Code Online (Sandbox Code Playgroud) 我正在尝试调用外部API,并将结果用作Ember Data模型中的计算属性。可以很好地获取结果,但是在Promise解析之前返回了计算的属性,从而导致未定义。这是观察员的用例吗?
export default DS.Model.extend({
lat: DS.attr(),
lng: DS.attr(),
address: Ember.computed('lat', 'lng', function() {
var url = `http://foo.com/json?param=${this.get('lat')},${this.get('lng')}`;
var addr;
var request = new Ember.RSVP.Promise(function(resolve, reject) {
Ember.$.ajax(url, {
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
});
request.then(function(response) {
addr = response.results[0].formatted_address;
}, function(error) {
console.log(error);
})
return addr;
})
});
Run Code Online (Sandbox Code Playgroud) 所以我理解Ember可以计算其中的数组和元素.这里有两个选择.
someArray.[]和someArray.@ each
如果说我更改了数组中的一个元素,并且有一个依赖于它的计算属性.我应该使用哪一个?谢谢.