Ko没有保留选定的价值

时间:2014-10-20 12:35:02

标签: javascript knockout.js

如果有任何不正确,请原谅。发布我的第一个问题! 嗨,自从我开始在我的新项目中使用konckout以来,它已经有一段时间了。到目前为止,一切都很顺利,面临着两个基本问题

  1. 我无法使用所选的子项值
  2. 预先选择我的下拉列表
  3. 当我尝试更改所选子项时,不保留
  4. 我尝试调试以检查ko是否正在更新“Item”对象的基础可观察“selectedOption”属性,幸运的是它正在做但是我改变了项目并且返回我的选定值并未保留 它会回到列表中的第一项。

    我无法理解缺少的东西

    任何人都可以解释为什么不保留selectedOption值以及为什么我不能预先选择我的下拉列表

    提前致谢。

    请在jsfiddle working sample中找到示例

    function Item(data) {
        //debugger;
        this.name = data.name;
        this.subItems = ko.observableArray(data.subItems);
        this.selectedOption = ko.observable(data.option);
        //someother properties of this object
    }
    
    function SubItem(data) {
        //debugger;
        this.name = data.name;
        //someother properties of this object
    }
    
    function ViewModel() {
        var self = this;
        self.items = ko.observableArray(
        [
        new Item({
            name: "Item 1",
            option: "Sub 12",
            subItems: [
                "Sub 11",
                "Sub 12",
                "Sub 13",
                "Sub 14"]
        }),
        new Item({
            name: "Item 2",
            option: "Sub 23",
            subItems: [
                "Sub 21",
                "Sub 22",
                "Sub 23",
                "Sub 24"]
        }),
        new Item({
            name: "Item 3",
            option: "Sub 33",
            subItems: [
                "Sub 31",
                "Sub 32",
                "Sub 33",
                "Sub 34"]
        })
    
        ]);
        self.selectedItem = ko.observable();
        self.onChange = function(vm, event) {
            debugger;
            console.log(vm);
        }
    }
    
    ko.applyBindings(new ViewModel());
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
    <select data-bind="options: items, optionsText: 'name', value: selectedItem"></select>
    <select data-bind="options: selectedItem() ? selectedItem().subItems : [], 
            value: selectedItem() ? selectedItem().selectedOption : '', event: {change: onChange}"></select>
    <span data-bind="text: selectedItem() ? selectedItem().selectedOption : ''"></span>

0 个答案:

没有答案