3

ドロップダウンからパーセンテージとして選択された保存されたビューを表示して編集可能にしようとしています。計算された関数の読み取り/書き込み内でオブザーバブルを取得して参照する方法がよくわかりません。これは動作しません...

http://jsfiddle.net/PastorBones/zmdJb/

脚本

function viewModel(){
    var self = this;

    self.data = [
        {name: 'Test1', percent: ko.observable(.1)},     
        {name: 'Test2', percent: ko.observable(.543)},         
        {name: 'Test3', percent: ko.observable(.0123)}         
    ];
    self.selOption = ko.observable();
    self.chosenOptions = ko.observableArray();
    self.addData = function(){
        if(typeof(self.selOption) !== 'undefined'){
          self.chosenOptions.push(self.selOption());
          self.selOption(undefined);
        }  
    }
    self.formatAsPercent = ko.computed({
        read: function(obj){
            if(typeof(obj) === 'undefined') return '';                
            return (obj.percent() * 100).toFixed(2) + '%';
        },
        write: function(obj){
            var val = obj.percent().replace('%','');
            obj.percent(val / 100);            
        }
    });
}

ko.applyBindings(new viewModel());
​

HTML

<select data-bind="options: data, optionsText: 'name', optionsCaption: 'Choose...', value: selOption"></select>
<button data-bind="click: addData, enable: typeof(selOption()) !== 'undefined'">+</button>

<div data-bind="foreach: chosenOptions">
    <div>
        <span data-bind="text: $data.name"></span>
        <input data-bind="value: $root.formatAsPercent($data)" />
    </div>
</div>
​
4

1 に答える 1

3

子のプロパティにアクセスするには、計算されたプロパティをレベルで定義する必要があります。変更されたフィドルを参照してください:http://jsfiddle.net/zmdJb/3/

于 2012-09-28T14:49:43.110 に答える