标签: ember-data

有谁知道什么时候ember-data准备就绪?或者还有其他REST API通信解决方案吗?

我有一个纯REST rails后端,我正在使用Ember.JS在客户端工作我明白ember-data用于REST通信,但我发现它甚至不在生产中有没有人知道它何时会准备好?

或者,如果有更好的解决方案可以使用?

ember.js ember-data

3
推荐指数
1
解决办法
1128
查看次数

EmberJS - 断言失败:#each循环的值必须是一个数组.你通过了(生成的应用控制器)

我正在努力让我的模型的夹具数据渲染到我的模板,当我在模板中尝试每个循环时,我收到上面的错误:

{{#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)

谁能告诉我我做错了什么?

谢谢

javascript ember.js ember-data

3
推荐指数
1
解决办法
4968
查看次数

如何检查属性是否脏

isDirty模型上的-flag表示一个或多个属性已更改但未保存到服务器,但是是否可以针对特定属性进行检查?

像这样: model.isPropertyDirty('name')

ember.js ember-data

3
推荐指数
1
解决办法
6119
查看次数

接收404时的EmberJS模型路线

(同样的文字也在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,甚至不移动它们).

任何的想法?

ember.js ember-data

3
推荐指数
1
解决办法
2305
查看次数

合并路径中的两个模型数组

我有一个控制器处理模型列表.这些模型有两种不同的类型(例如MessageComment).为了使用ArrayController我必须将两个列表合并为一个.有没有办法做到这一点 ?

这个线程中提出的基于类的多态性将解决我的问题,但它们不太可能很快实现.

在我目前的解决方案,我用一个ObjectControllerreveiving都commentsmessages.然后我使用计算属性合并它们:

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.js ember-data

3
推荐指数
1
解决办法
3125
查看次数

使用Ember-Data 1.0.0-beta的临时非持久性记录

我是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已经充分改变,使所有这些解决方案无法运行.

谢谢你的帮助!

ember.js ember-data

3
推荐指数
1
解决办法
1048
查看次数

控制器和路由中的模型挂钩有什么区别?

我尝试了一个简单的应用程序,但我很困惑,因为什么时候在控制器中使用模型钩子,什么时候去路由模型钩子.以此为例(使用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.js ember-data ember-cli

3
推荐指数
1
解决办法
244
查看次数

Ember验收测试在PhantomJS中失败但在Chrome中传递

我正在尝试为我的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)

acceptance-testing ember.js ember-data

3
推荐指数
1
解决办法
953
查看次数

Ember Data计算属性中的承诺结果

我正在尝试调用外部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.js ember-data

3
推荐指数
1
解决办法
2758
查看次数

someArray.[]和someArray.@ each的差异

所以我理解Ember可以计算其中的数组和元素.这里有两个选择.

someArray.[]someArray.@ each

如果说我更改了数组中的一个元素,并且有一个依赖于它的计算属性.我应该使用哪一个?谢谢.

javascript arrays jquery ember.js ember-data

3
推荐指数
1
解决办法
62
查看次数