1

我有一个绑定到模型的 select multi,然后我想选择以前使用第二个模型选择的一些值。我认为这是一件简单直接的事情,但在淘汰赛中它似乎比应该做的更难。这是我到目前为止所拥有的。提琴手

选择多

<select data-bind="options:availableThings,optionsText: 'Title', selectedOptions: selectedThings" size="5"  multiple="true"></select>

我的模型

 var initialThingsModel = [
            {"Id":1,"Title":"First"},
            {"Id":2,"Title":"Next"},
            {"Id":3,"Title":"Another"},
            {"Id":4,"Title":"Last"}
        ];
        var initialSelectedThingsModel = [   
            {"Id":2,"Title":"Next"},
            {"Id":4,"Title":"Last"}
        ];

然后是绑定第一个模型的其余部分和保存并提交所选值的管道:

var viewModel = {
            availableThings: ko.observableArray(initialThingsModel),
            selectedThings: ko.observableArray(initialSelectedThingsModel),
            save: function () {                  
                $.ajax({
                    url: '/home',
                    type: 'POST',
                    data: ko.toJSON(this.selectedThings),
                    dataType: "json",
                    contentType: "application/json;  charset=utf-8",
                    success: function (data) {
                        alert(data.Message);
                    }
                });
            }
        };

        ko.applyBindings(viewModel);

然后我面临的问题是绑定initialSelectedThingsModel,以便选择列表预先填充那些选定的项目。

广泛的问题,淘汰赛是正确的解决方案还是骨干网会提供一种更简单的方法来实现这种事情?

4

1 回答 1

1

您的绑定是正确的。问题是您传入的对象selectedThings不存在于您的availableThings. 您需要传入相同的对象,如下所示:

    var initialSelectedThingsModel = [   
        initialThingsModel[0],
        initialThingsModel[3]
    ];

我没有足够的骨干经验来判断它是否会更好,但是您的 Knockout 代码对我来说似乎非常简洁。不知道你能做到多简单。

于 2013-04-13T05:40:26.587 回答