Knockout.js 所选项目为';t工作击出

Knockout.js 所选项目为';t工作击出,knockout.js,knockout-mapping-plugin,knockout-2.0,Knockout.js,Knockout Mapping Plugin,Knockout 2.0,我是一个新手,我遇到了一些问题 我不明白为什么单击后,选择的未更新 有人能看出我做错了什么吗 <div> <ul data-bind="foreach: Ofs"> <li data-bind="text: Number, click: $root.selectOf" style="cursor:pointer"/> </ul> <strong>Item clicked: </strong&

我是一个新手,我遇到了一些问题

我不明白为什么单击后,选择的未更新

有人能看出我做错了什么吗

<div>
    <ul data-bind="foreach: Ofs">
        <li data-bind="text: Number, click: $root.selectOf" style="cursor:pointer"/>
    </ul>
    <strong>Item clicked: </strong><span data-bind="text: selectedOf.Number" />
</div>

<script type"text/javascript">
    var OfsModel = function (initialData) {
        //console.log(initialData);
        var self = this;
        self.CurrentState = ko.observable(initialData.CurrentState);
        self.Ofs = ko.observableArray(initialData.Ofs);
        self.selectedOf = ko.observable();

        self.selectOf = function (of) {
            //console.log(of);
            self.selectedOf(of);
            //console.log(self.selectedOf());
        }
    }

    var initialData = '{"Ofs":[{"Client":"A","Number":"1","Qty":10,"QtyRejected":5,"StopReason":"","ModifiedOn":"\/Date(1345732172456)\/","IsHighlighter":false,"SequencesAvailable":[{"Id":1,"Name":"Seq1"},{"Id":2,"Name":"Seq2"},{"Id":3,"Name":"Seq3"}],"SelectedSequence":null},{"Client":"B","Number":"2","Qty":20,"QtyRejected":0,"StopReason":"too much work","ModifiedOn":"\/Date(1345732172457)\/","IsHighlighter":false,"SequencesAvailable":[{"Id":1,"Name":"Seq1"},{"Id":2,"Name":"Seq2"}],"SelectedSequence":null},{"Client":"C","Number":"3","Qty":30,"QtyRejected":0,"StopReason":"","ModifiedOn":"\/Date(1345732172457)\/","IsHighlighter":false,"SequencesAvailable":[{"Id":1,"Name":"Seq1"}],"SelectedSequence":null}],"CurrentState":""}';

    var vw = $.parseJSON(initialData);
    ko.applyBindings(new OfsModel(vw));
</script>

  • 单击的项目: var模型=函数(初始数据){ //console.log(initialData); var self=这个; self.CurrentState=ko.observable(initialData.CurrentState); 自身Ofs=ko.observatarray(初始数据Ofs); self.selectedOf=ko.observable(); self.selectOf=功能(of){ //控制台日志(of); 自我选择的(of); //log(self.selectedOf()); } } var initialData='{“Ofs”:[{“客户机”:“A”,“数字”:“1”,“数量”:10,“QtyRejected”:5,“StopReason”:“\/Date(1345732172456)\/”,“IsHighlighter”:false,“SequencesAvailable”:[{“Id”:1,“名称”:“Seq1”},{“Id”:2,“名称”:“Seq2”},{“Id”:3,“名称”:“Seq3”}],“SelectedSequence”:null},{“客户机”:“B”,“数字”:“2”,“数量”:20,“QtyRejected”:0,“StopReason”:“工作量过大”、“修改项”:“\/Date(1345732172457)\/”、“IsHighlighter”:false、“SequencesAvailable”:[{“Id”:1,“Name”:“Seq1”}、{“Id”:2,“Name”:“Seq2”}]、“SelectedSequence”:null}、{“Client”:“C”、“Number”:“3”、“数量”:30,“QtyRejected”:0、“StopReason”:“、“修改项”:“\/Date(1345732172457)\/”、“IsHighlighter”:false、“SequencesAvailable”:“{“Id”:1”、“Name”:“SequencesAvailable”:SelectedSequence“:null}],“CurrentState”:“}”; var vw=$.parseJSON(initialData); ko.applyBindings(新车型(vw));
编辑:
当您访问
selectedOf
Number
属性时,我将代码设置为,然后您需要首先通过将其作为一个不带参数的函数调用(如
selectedOf().Number
)来获取可观测值

但是,如果在填充
selectedOf
之前执行此操作,则尝试访问未定义值的
Number
时将导致错误

解决这个问题的一个好方法是使用类似于带绑定的
来设置元素子元素的作用域。它还可以防止null。这类似于:

<div data-bind="with: selectedOf">
    <strong>Item clicked: </strong><span data-bind="text: Number" />
</div>

单击的项目:
以下是一个示例:


或者,您可以为
Number
值创建一个可计算的可观察值,以防止空值或绑定,如
data bind=“text:selectedOf()?selectedOf().Number:'none'

当您访问
selectedOf
Number
属性时,您需要首先通过将其作为不带参数的函数调用来获取可观察值,如
selectedOf().Number

但是,如果在填充
selectedOf
之前执行此操作,则尝试访问未定义值的
Number
时将导致错误

解决这个问题的一个好方法是使用类似于带
绑定的
来设置元素子元素的作用域。它还可以防止null。这类似于:

<div data-bind="with: selectedOf">
    <strong>Item clicked: </strong><span data-bind="text: Number" />
</div>

单击的项目:
以下是一个示例:

或者,您可以为
Number
值创建一个可计算的可观察值,以防止空值或绑定,如
data bind=“text:selectedOf()?选择DOF()。编号:“无”