gpt4 book ai didi

javascript - Ember.js:一个模型如何观察其他模型?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:25:01 24 4
gpt4 key购买 nike

我有一个用于我的 的模型和一个用于每个 的模型。每个源都有许多段。每个段都有一个切换 isSelected 属性的操作。

我需要更新所选分割市场的列表。我的第一个想法是做类似...

App.Source = Ember.Object.extend({
selectedSourceList = Em.A(),

selectedSourcesObserver: function() {
// code to update array selectedSourceList
}.observes('segment.isSelected')
});

.. 但是 observes() 函数不正确。我是 ember 新手,所以我的方法可能完全错误。

一个模型中的方法如何观察许多其他模型的属性?

编辑:更正名称以表明分段模型是针对单个分段的,而不是分段的集合(这是我计划在源模型中执行的操作)。

最佳答案

我认为您的问题分为三个部分:

  1. 如何观察收藏
  2. 一般观察员
  3. 管理关系

观察集合

@each 属性有助于观察集合中项目的属性:segments.@each.isSelected

一般观察者

函数上的

.observes() 是设置观察者函数的简写。如果此函数的目标是更新集合,则使用 .property() 可能会更好,它设置观察者并将该函数视为属性:

selectedSegments: function() {
return this.get('segments').filterProperty('isSelected', true);
}.property('segments.@each.isSelected')

这意味着 selectedSegments 是来自该对象的段的子集,这些段被选中并在项目被删除或标记为选中时自动管理。

管理关系

对于普通的 Ember 对象,您需要管理关系、将新项目插入数组等。

segments = Em.A(), //somehow you are managing this collection, pushing segments into it 

另请注意 Ember 对象和 Ember 模型之间的区别。 Ember Data 是一个可选的附加库,它允许指定模型和关系并帮助您管理模型。使用 Ember 数据,您可能会得到如下内容:

App.Source = DS.Model.extend({

//ember-data helps manage this relationship
// the 'segment' parameter refers to App.Segment
segments: DS.hasMany('segments'),

selectedSegments: function() {
return this.get('segments').filterProperty('isSelected', true);
}.property('segments.@each.isSelected')
});

和 App.Semgent

App.Segment = DS.Model.extend({
selection: DS.belongsTo('selection')
});

关于javascript - Ember.js:一个模型如何观察其他模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19933871/

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