0

私のアレイが展示されています

[
 {"name":"Domain  Users","access":null},
 {"name":"Domain  Guests","access":null},
 {"name":"Domain  Controllers","access":null},
 {"name":"Domain  Admins","access":null},
 {"name":"teachers","access":"1"},
 {"name":"SparkUsers","access":null}
]  

私の配列は監視可能な配列であり、テンプレートを介してそれを調べています。

クリックするたびに、アクセス値が変更されます (null - 0 - 1)

私がやろうとしているのは、アクセス値が変更されたときに、変更されたものだけを取得できるようにしたいということです ( {"name": ..., "access": ...} 変更された "access" のペア) 配列全体ではなく。私はそれを行う方法についての手がかりがありません。

助けてください。ありがとう!

4

1 に答える 1

1

私は興味を持ち、この解決策を思いつきました ( http://jsfiddle.net/rhp_74/qTema/を参照してください) 一言で言えば、おそらくやりたいことは、変更イベントをサブスクライブして適切に反応できるようにすることですaccessko.observable

HTML

<div data-bind="foreach: items">
    <a href="#" data-bind="text: name, click: changeAccess"></a>
    &nbsp;
    Access: <span data-bind="text:access"></span><br />
</div>
<div data-bind="with: selected">
    <h1>Clicked On</h1>
    Name: <span data-bind="text: name"></span> <br/>
    Access: <span data-bind="text: access"></span> <br/>
</div>

Javascript

var raw =  [
       {"name":"Domain  Users","access":null},
       {"name":"Domain  Guests","access":null},
       {"name":"Domain  Controllers","access":null},
       {"name":"Domain  Admins","access":null},
       {"name":"teachers","access":"1"},
       {"name":"SparkUsers","access":null}
   ];

   function ItemViewModel(item) {
       var self = this;

       this.name = item.name;
       this.access = ko.observable(item.access);
       this.changeAccess = function() {
           self.access(
               this.access() == "0" ? "1" : 
                   this.access() == "1" ? null : "0");
       };
   };

   function App() {

       var self = this;

       this.selected = ko.observable(null);
       this.items = ko.observableArray();

       for(var i = 0; i < raw.length; i++) {
           var item = new ItemViewModel(raw[i]);
           item.access.subscribe(function() {
               self.selected(this);
           }.bind(item));
           this.items.push(item);
       }
   };

   var app = new App();

   ko.applyBindings(app);
于 2013-06-13T21:31:11.107 に答える