gpt4 book ai didi

ember.js - 如何将子记录添加到现有父记录?

转载 作者:行者123 更新时间:2023-12-01 05:17:27 25 4
gpt4 key购买 nike

我一直在谷歌搜索和搜索 Stack Overflow 以获得关于这个主题的某种提示,但信息充其量是分散的。

我正在尝试创建一个新的子记录 ( Comment ) 并将其保存到现有的父记录 ( Post )。我正在使用 Ember-Model,而不是 Ember-Data,但任何提示或指针将不胜感激。

目前,我已经成功创建了一个新的嵌入式 Comment但是 只有当它使用新的 Post 创建时记录。所以:

如何加载/检索当前加载的 Post (父记录)以申请 Comments (子记录)要吗?

我一直在阅读有关 Controller 依赖项的信息,使用 needs:this.controllerForthis.modelFor为了能够访问另一个 Controller /模型的 content但一直无法将这些东西连接在一起成为有意义的东西。

无论如何,这是我将我的应用程序代码缩减为的内容,希望我能够偶然发现这样做的正确方法......

路线

    App.Router.map(function() {
this.resource('post', { path: '/:post_id' }, function() {
this.resource('comments', { path: '/comments'} );
});
});

我删除了所有其他资源和路线,所以我只剩下 App.Post , App.PostIndex , 和 App.Comments .我认为我的路线是这里的问题,我认为我没有正确实现使用加载的方法 Post记录在我的 Comments路线。
    App.IndexRoute = Ember.Route.extend({
model: function() {
return App.Post.find();
},

setupController: function(controller, model) { // I'm not certain if this
controller.set('content', model); // setupController is needed?
}

});

App.PostRoute = Ember.Route.extend({
model: function(params) {
return App.Post.find(params.post_id);
},

setupcontroller: function( controller, model) { // again, unsure if this
this.controllerFor('post').get('comments'); // is correct.
controller.set('content', comments);
}

});

App.CommentsRoute = Ember.Route.extend({
afterModel: function() {
this.set('post', this.modelFor('post'));
},

setupcontroller: function( controller, model) {
this.controllerFor('post').get('comments');
controller.set('content', comments);
}

});

Controller
App.CommentsController = Ember.ArrayController.extend({
needs: "post",

actions: {

addComment: function() {
var post = App.Post.create({
title: 'static post title'
});

post.get('comments').create({
message: 'static message'
});

post.save();

}

}

});

这是我当前的 Comments Controller,可以新建一个 Post带嵌入式 Comment .我发现并获得了许多创建 Comment 的示例。 ,但似乎没有一个对我有用。基本上,我正在努力定义 var post = ...作为当前加载的记录。我已经实现了各种方法来尝试反复试验。到目前为止,我已经尝试过:
  • var post = App.Post.create(); , 返回未定义的属性,因为这会创建一个新记录。但是,我试了一下,因为我看到的每个与此相关的示例都定义了他们的记录。
  • var post = this.get('post'); , 在未定义时返回无法调用 'get'。我已经尝试使用这种方法在 Comments 上定义我当前的帖子 Controller 和 Post Controller 。
  • var post = this.get('controllers.post.content); , 从我正在使用的后端返回一个“循环错误”。
  • var post = App.Post.find(); , 在未定义时返回无法调用 'get'。
  • var post = App.Post.find(1); , 再次返回一个无法调用 'get' 的 undefined。我想我会试一试,因为这是人们提供的那些反复出现的例子之一。我使用的后端将自己的 ID 应用于每条记录,我不确定我是否能够/如何拥有 .find()方法使用动态 ID 值并仅检索我刚刚加载的模型。

  • 我猜我没有正确设置我的路由和 Controller 依赖项?

    如果有人有建议、相关链接或修复,我将不胜感激。

    在这一点上,这个(看似简单的)问题/用例让我不知所措。

    最佳答案

    试试这个(在测试版 2 之前有效):

    App.CommentsController = Ember.ArrayController.extend({
    actions: {
    addComment: function() {
    this.content.createRecord({
    message: 'static message'
    });
    }
    }
    });

    Ember 数据 Beta 2 及更高版本:
    App.CommentsController = Ember.ArrayController.extend({
    needs: ["post"],
    actions: {
    addComment: function() {
    var post = this.get('controllers.post');
    var comment = this.get('store').createRecord('comment', {
    message: 'static message',
    post: post
    });
    comment.save().then(function() {
    post.addObject(comment);
    // You may or may not need to save your post, too. In my case my backend handles
    // the inverses of relationships (if existing), so there's no need. We still need
    // to do this for Ember, though

    });
    }
    }
    });

    关于ember.js - 如何将子记录添加到现有父记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18907773/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com