gpt4 book ai didi

ember.js - 为什么我需要在成功创建 hasMany 后手动 pushObject?

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

我有 hasMany/belongsTo 关系

App.Appointment = DS.Model.extend({
employee: belongsTo('employee', { async: true})
});
App.Employee = DS.Model.extend({
appointments: hasMany('appointment', { async: true})
});

我有一个简单的表格,可以让我创建约会
var appointment = {
employee: employee (another ember-data model)
}
this.store.createRecord('appointment', appointment).save().then(function(apt) {
self.get('target').transitionTo('day.index');
}

如果我执行上述操作,我的“员工”数组永远不会正确显示反向(即,当我稍后执行诸如 employee.get('appointments'); 之类的操作时,它不会反射(reflect)新约会;

我已经能够“解决”这个问题,如下所示
this.store.createRecord('appointment', appointment).save().then(function(apt) {
employee.get('appointments').pushObject(apt);
employee.save();
self.get('target').transitionTo('day.index');
}

我不喜欢这个有两个原因
  • 我觉得如果我正确连接了 Ember 数据,它应该只是
    “知道”我已经添加了与相关员工的新约会(如
    我看到它穿过电线)
  • 这会强制对我的 hasMany 进行“查找”(因此它会触发一个请求
    要求员工 apts - 经常搞乱“如何
    许多”我想在给定的上下文中显示的 apts)。

  • 我的关系在这里设置正确吗?或者这是 ember-data 1.0 beta 4/5 中的错误?

    我目前正在使用 ember-data 1.0 beta 4 和 ember.js 1.3.1

    最佳答案

    对于它的值(value),这是我目前正在使用的对我的“项目”进行递归保存的内容。他们有 child ,并且拥有与他们相关联的权限。另外值得注意的是,这些项目是递归的(因此,项目可以有子项,这些项可以有子项......等等)。这将处理某些项目被保存或不包括所有父级重新关联以及不包括什么的情况。这个对我有用。这可能会帮助你(或者它可能会让你完全困惑,但我希望不会。)

    如果你能从中得到一些有用的东西,那就太好了:)

    另外值得注意的是,我对错误捕获没有做任何事情。这显然不理想!

    saveAll: function() {
    var saveExistingObjects, self;
    saveExistingObjects = function(item) {
    var promise;
    promise = new Ember.RSVP.Promise(function(resolve, reject) {
    return item.get('childItems').then(function(childItems) {
    var childPromises;
    childPromises = childItems.map(function(childItem) {
    return saveExistingObjects(childItem);
    });
    return Ember.RSVP.all(childPromises).then(function(arrayOfSavedChildren) {
    var itemPermissions, itemWasNew;
    itemWasNew = item.get('isNew');
    itemPermissions = item.get('itemPermissions');
    return item.save().then(function(savedItem) {
    if (itemWasNew) {
    arrayOfSavedChildren.forEach(function(childItem) {
    childItem.set('parentItem', savedItem);
    return childItem.save();
    });
    itemPermissions.forEach(function(itemPermission) {
    itemPermission.set('item', savedItem);
    return itemPermission.save();
    });
    }
    savedItem.set('childItems', []);
    Ember.RSVP.Promise.cast(savedItem.get('childItems')).then(function(cb) {
    return cb.addObjects(arrayOfSavedChildren);
    });
    return resolve(savedItem);
    })["catch"](function(error) {
    console.log("Didn't save!");
    return reject(error);
    });
    })["catch"](function(error) {
    console.log("Didn't finish saveExistingObjects and returning childPromises");
    console.log(error);
    return reject(error);
    });
    })["catch"](function(error) {
    console.log("Didn't get childItems");
    console.log(error);
    return reject(error);
    });
    });
    return promise;
    };
    self = this;
    return saveExistingObjects(self);
    }

    关于ember.js - 为什么我需要在成功创建 hasMany 后手动 pushObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21206307/

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