标签: ember-data

删除创建的未提交记录?

我无法弄清楚如何删除由其创建的模型App.store.createRecord().看看这个小提琴:http://jsfiddle.net/Adw4F/2/ 您可以删除从灯具(或其他适配器)加载的记录,但不能创建.

ember.js ember-data

5
推荐指数
1
解决办法
1534
查看次数

Ember Data嵌套资源URL

假设我有一个带有以下布局的Rails应用程序(从我的实际项目中简化了一下):

User
    has many Notes

Category
    has many Notes

Note
    belongs to User
    belongs to Category
Run Code Online (Sandbox Code Playgroud)

注释可以在以下位置获得:

/users/:user_id/notes.json
/categories/:category_id/notes.json
Run Code Online (Sandbox Code Playgroud)

但不是:

/notes.json
Run Code Online (Sandbox Code Playgroud)

在整个系统中有太多的Notes要在一个请求中向下发送 - 唯一可行的方法是仅发送必要的Notes(即,属于用户试图查看的用户或类别的Notes).

用Ember Data实现这个的最佳方法是什么?

ember.js ember-data

5
推荐指数
1
解决办法
2229
查看次数

Emberjs/data Object"没有方法'_create'"

我试图使用Ember和Ember/Data来显示从REST API返回的简单JSON.
这是我的js:

window.ManageClients = Em.Application.create();

ManageClients.store = DS.Store.create({
  revision: 4,
  adapter: DS.RESTAdapter.create({
    bulkCommit: false,
    namespace: "api"
  })
});

ManageClients.Client = DS.Model.extend({
  url: '/clients',
  name: DS.attr('string'),
  slug: DS.attr('string'),
  programs: DS.attrArray('string'),
  selfserve: DS.attrArray('string')
});

ManageClients.Clients = ManageClients.store.findAll(ManageClients.Client);

ManageClients.ClientsView = Em.View.create({
  templateName: 'client-template'
});

ManageClients.ClientsView.appendTo('#ManageClients');
Run Code Online (Sandbox Code Playgroud)

我的模板:

<div id="ManageClients">
    <script type="text/x-handlebars" data-template-name="client-template">
        <ul>
            {{#each ManageClients.Clients}}
            <li>
                {{#if isLoaded}}
                    Client:{{name}}
                {{else}}
                    Loading...
                {{/if}}
            </li>
            {{/each}}
        </ul>
    </script>
</div>
<script language="javascript" src="/js/manageClients.js"></script>
Run Code Online (Sandbox Code Playgroud)

错误:

Uncaught TypeError: Object ManageClients.Client has no method '_create' ember-data.js:1811
DS.Store.Ember.Object.extend.materializeRecord ember-data.js:1811
DS.Store.Ember.Object.extend.findByClientId …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

5
推荐指数
1
解决办法
1235
查看次数

Ember JS,更新不反映在视图中的数组

更新Ember JS数组不会反映在视图中.

调节器

App.MyController = Ember.ArrayController.extend({
  results: [],
  init: function(){
    _this = this
    App.MyModel.find({}).then(function(contents) {
      obj1 = contents.objectAt(0)
      obj1.get('data').hasMany.results.forEach(function(item){
          _this.results.push(item)
      });
    })
    //rest of the code
  }
})
Run Code Online (Sandbox Code Playgroud)

模板

{{#each results}}
  // show items of reults.
{{/each}}
Run Code Online (Sandbox Code Playgroud)

这是我从服务器获取数据的代码片段,在加载时,我将其推入结果数组.从服务器加载数据需要一些时间,因此模板映射到空结果数组.理想情况下,结果数组应该更新模板中的内容,但逻辑上不应该更新.

有没有人知道我失踪的地方?或做错了.

提前致谢.

ember.js ember-data

5
推荐指数
1
解决办法
3198
查看次数

在ember数据中建模没有id的对象

我正在为会计部门构建仪表板应用程序.

用户将选择一个月,并查看当月符合特定条件的所有公司.路线将是

/:month_id                         a summary page
/:month_id/companies               more details about each company
/:month_id/companies/:company_id   all details about a single company
Run Code Online (Sandbox Code Playgroud)

理想情况下,我有一个month模型hasMany company模型.唯一的问题是,公司将在几个月内出现.

如果我错了,请纠正我,但这是不是意味着如果公司已经在商店,当要求新的月份时,它将从商店而不是服务器获取该公司的数据?每个月的数据会有所不同,所以这对我不起作用.

我想在这个应用程序中,每个公司的id都是他们的正常,整数id加上选定的月份.因此,解决这个问题的方法之一就是给每个公司一个像'15-Mar-2013'.

或者,我可以companies通过原始数据传递每个月的数据,并在plain数组上进行转换.但问题是,我必须计算公司的总量(除了整个月),将这两件事分开是很好的.如果我有一个完全独立的公司模型,我可以在模型中去城镇:

App.Company = DS.Model.extend({
    month: DS.belongsTo('App.Month'),
    name: DS.attr('string'),
    contracts: DS.hasMany('App.Contract'),

    totalRevenue: function() {
        return this.get('contracts')
            .filterProperty('type', 'newSetup')
            .getEach('feeChange').reduce(function(accum, item) {
                return accum + item;
            }, 0);
    }.property('contracts.@each.feeChange'),

    ...additional aggregation functions
});
Run Code Online (Sandbox Code Playgroud)

你怎么看?

ember.js ember-data

5
推荐指数
1
解决办法
1167
查看次数

在与Ember.Js的hasMany关系中创建子记录

通过我的搜索,我没有找到满意的答案,所以我想我会在这里问.

我目前正在使用Ember.Js,Ember-Data和Ember-Firebase-Adapter,并尝试创建一个CRUD应用程序,它将创建一个父记录,然后创建后续子记录到所述父记录.

(请注意,DS.Firebase.LiveModel是Firebase适配器,相当于DS.Model/Ember.Model)

这是我的模型,改为通用的帖子/评论类型

    App.Post = DS.Firebase.LiveModel.extend({
      name: DS.attr('string'),
      body: DS.attr('string'),
      date: DS.attr('date'),
      comments: DS.hasMany('App.Comment', {embedded: 'always'})
    });

    App.Comment = DS.Firebase.LiveModel.extend({
      message: DS.attr('string'),
      timestamp: DS.attr('string'),
      post: DS.belongsTo('App.Post', {key: "post_id"})
    });
Run Code Online (Sandbox Code Playgroud)

(我应该post_id= post?)

这是我创建的路线Comments:

    App.PostsCommentRoute = Ember.Route.extend({
      setupController: function(controller) {
        controller.set('content', App.Comment.find());
      }

    });
Run Code Online (Sandbox Code Playgroud)

这是我的控制器PostsCommentRoute:

    App.PostsCommentController = Ember.ObjectController.extend({
      newMessage: null,
      newTimestamp: null,

       saveComment: function() {
        App.Pbp.createRecord({
          message: this.get('newMessage'),
          timestamp: this.get('newTimestamp')
        })


          App.store.commit();
          this.set('newMessage', null);
          this.set('newTimestamp', null);


        }
    });
Run Code Online (Sandbox Code Playgroud)

我想我可能会错过序列化器?我已经阅读了几件事,addArray但我试图插入的东西并没有证明是富有成效的.因为我的评论很好,但是在我的JSON中它们与帖子无关.

有没有办法让创建 …

ember.js ember-data firebase

5
推荐指数
1
解决办法
1313
查看次数

使用Ember.js持久保存儿童模型的正确方法是什么?

问题

我正在教自己Ember并且在坚持我的孩子模特时遇到了问题.这是一个演示问题的JSBin:

http://jsbin.com/OnUXEti/2/edit?html,js,output

如果您使用它,您将能够创建帖子和评论,但只有帖子在页面重新加载后仍然可用.(我正在使用ember-data和localStorage适配器)


有两种模型类型,PostComment

App.Post = DS.Model.extend({
  title: DS.attr('string'),
  comments: DS.hasMany('comment')
});

App.Comment = DS.Model.extend({
  message: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)

每个帖子都有一系列评论.我打算在那里有以下网址:

  • /posts 将列出所有帖子
  • /posts/1 将显示ID为1的帖子
  • /posts/1/comments 将显示帖子1的评论

路由定义如下:

App.Router.map(function() {
  this.resource("posts", { path: "/posts" });
  this.resource("post", { path: "/posts/:post_id" }, function() {
    this.resource("comments", { path: "/comments" });
  });
});
Run Code Online (Sandbox Code Playgroud)

我可以毫无问题地将Post模型写入商店.我不能做的是保存评论模型.如果您使用上面的JSBin示例,您将看到可以创建注释,但在重新加载页面时它们不会保留.

我尝试在CommentsController中保存注释:

App.CommentsController = Ember.ArrayController.extend({
    needs: "post",
    post: Ember.computed.alias("controllers.post"),
    newMessage: '',
    actions: {
        create: function() {
            var message = this.get('newMessage');

            var comment = this.store.createRecord('comment', {
                message : message
            }); …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

5
推荐指数
1
解决办法
2003
查看次数

ember-data - store.find('model')总是查询服务器

详细信息:ember-data-1.0.0.beta.3和默认的RESTAdapter

我可能误解了该store.find()方法的工作原理,但是,根据我的理解,如果我要求的记录已存在于商店中,则以下代码不应查询服务器:

var IndexRoute = Em.Route.extend({
    model: function() {
       return this.store.find('link');
    },
});
Run Code Online (Sandbox Code Playgroud)

从emberjs.com文档中DS.Store.find():

find方法将始终返回将使用记录解析的promise.如果记录已经在商店中,则承诺将立即得到解决.否则,商店将询问适配器的find方法以查找必要的数据.

我有另一条路径与完全相同的模型钩子,但当我访问该路线时,即使数据已经存储在商店中,服务器也会被查询.如果我回到Index路线,它会再次被查询.不应该.find()处理这个?

javascript ember.js ember-data

5
推荐指数
1
解决办法
8823
查看次数

通过Faye/websockets订阅更新会导致重复记录

更新

演示:http://jsbin.com/ogorab/311/edit


我正在尝试构建一个简单的聊天室,使用Faye/Websockets实时更新.消息是使用常规REST发布的,但也有通过Faye订阅/ messages/created,store.pushPayload用于推送新消息.

现在发生以下情况,我可以看到它出错的地方,但我不知道如何解决它:

  1. 用户提交聊天消息
  2. ChatController处理提交,createRecord使用聊天消息调用,然后#save
  3. 聊天消息会立即显示在聊天中(触发createRecord).请注意,id还没有分配.
  4. REST请求将发送到服务器
  5. 服务器首先将消息发布给Faye
  6. 服务器响应REST请求
  7. 在解决ajax调用之前,消息已到达/ messages/created
  8. 该消息再次插入视图中(当然应该与原始消息合并,但仍然没有为其分配一个id)
  9. 解析了ajax调用,并分配了原始消息的id.

这会导致重复的消息,按以下顺序:

  1. [消息通过createRecord,将通过ajax响应解决]
  2. [通过pushPayload/ Faye 插入的消息]

我希望你能理解到目前为止.解决方案是让Faye在推送有效负载之前等待保存调用解析.不幸的是,我没有对正在保存的记录的引用(发生在控制器中,faye订阅已设置ApplicationRouter).

另外我希望这能以通用的方式工作:)

ember.js ember-data

5
推荐指数
1
解决办法
806
查看次数

Ember Data + JSONAPI-错误:适配器由于无效而拒绝了提交

我正在尝试通过POST对Ember Data 2.10的基于JSONAPI的API 的请求提交无效数据。

API用422代码和响应中的此有效负载正确响应(请注意,这些是错误对象,不是“正常” JSONAPI有效负载响应):

{
  "errors": [{
    "title": "Title can't be blank",
    "id": "title",
    "code": "100",
    "source": {
      "pointer": "/data/attributes/title"
    },
    "status": "422"
  }, {
    "title": "Layout can't be blank",
    "id": "layout",
    "code": "100",
    "source": {
      "pointer": "/data/relationships/layout"
    },
    "status": "422"
  }, {
    "title": "Page type can't be blank",
    "id": "page-type",
    "code": "100",
    "source": {
      "pointer": "/data/attributes/page-type"
    },
    "status": "422"
  }]
}
Run Code Online (Sandbox Code Playgroud)

该错误似乎大部分都可以加载到模型中,但是我在控制台中收到此错误:

ember.debug.js:19160 Error: The adapter rejected the commit because it …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data json-api

5
推荐指数
1
解决办法
1842
查看次数

标签 统计

ember-data ×10

ember.js ×10

firebase ×1

javascript ×1

json-api ×1