2

我有一个可观察到的文化特定对象的集合。需要与主编辑屏幕分开编辑/显示不变项目。

问题是 - 我可以通过两种方式绑定到集合中的单个项目。

这个小提琴提供了一个更复杂的 UI/Viemodel 的简化版本:

http://jsfiddle.net/Lu2y8/8/

我在我的视图模型中尝试了计算的可写属性,但它没有检测到集合中的不变项何时更改

您的意见将不胜感激。代码如下:

var ItemDescription = function () {
    var me = this;

    me.CultureInvariantId = ko.observable(0);
    me.CultureFormat = ko.observable('');
    me.Description = ko.observable('');
    me.IsInvariant = ko.observable(false);
};

function viewModel()
    {
      var me = this;
      me.Name = ko.observableArray();   
      me.InvariantName = ko.observable('');  




}
    function Initialize()
{
   var model = new viewModel();

     var invItemDescription = new ItemDescription();
      invItemDescription.Description('Invariant description');
      invItemDescription.CultureFormat ('');
      invItemDescription.IsInvariant  = true;

       model.Name.push(invItemDescription);

     var usItemDescription = new ItemDescription();
      usItemDescription.Description('USA description');
      usItemDescription.CultureFormat ('en-US');
      usItemDescription.IsInvariant  = false;

    model.Name.push(usItemDescription);

    return model;   

}

      ko.applyBindings(new Initialize());  
4

1 回答 1

1

如果我了解您要做什么,那么我认为一个不错的选择是创建一个表示不变ItemDescription对象的计算 observable。然后,您可以使用with绑定将编辑器绑定到其属性。

就像是:

function viewModel()
    {
      var me = this;
      me.Name = ko.observableArray();  

      me.SelectedName = ko.observable();

      me.InvariantName = ko.computed(function() {
          return ko.utils.arrayFirst(me.Name(), function(name) {
              return name.IsInvariant; 
          });
      });
}

使用如下标记:

<select data-bind="options: Name, optionsText: 'Description', value: SelectedName">
</select>
<div data-bind="with: SelectedName">
   <textarea data-bind="value: Description"> </textarea>    
</div>

Edit Invariant:
<div data-bind="with: InvariantName">
    <input type="input" data-bind="value: Description" />
</div>

示例:http: //jsfiddle.net/rniemeyer/3cH8T/

于 2012-11-10T13:53:37.833 回答