使用jquery更新字段不会更新observable

时间:2012-03-28 16:36:06

标签: javascript jquery knockout.js

我想向stackoverflow社区问好。

我几天前刚开始使用淘汰赛。

正确知道我正在使用它为我正在开发的CMS制作动态菜单构建器。

以下是代码:http://jsfiddle.net/dnlgmzddr/HcRqn/

问题在于,当我从选择框中选择一个元素时,输入字段会按预期更新,但是observable不会反映更改。因此,未启用添加按钮。

我错过了什么?我该如何解决?

谢谢。

2 个答案:

答案 0 :(得分:8)

填充url字段时,需要触发change事件以使observable得以升级。所以,你可以这样做:

$("#url").val('/pages/' + id).change(); 

另一个选择就是Knockout精神中的更多选择是在你的选择上使用绑定。在这种情况下,您可能希望使用该值填充observable,然后使用手动订阅将格式化的值默认为输入字段。

this.itemUrl = ko.observable();
this.selectedUrl = ko.observable();
this.selectedUrl.subscribe(function(newValue) {
    if (newValue) {
        this.itemUrl("/pages/" + newValue);                
    }
}, this);

然后,将您的选择绑定到selectedUrl

    <select id="pagedList" data-bind="value: selectedUrl">
        <option value=""><option>
        <option value="test">Test</option>
    </select>

以下是一个示例:http://jsfiddle.net/rniemeyer/HcRqn/21/

如果您的选项的“价值”是网址,您还可以取消额外的可观察和手动订阅。

答案 1 :(得分:1)

在选择字段时,我无法在代码中看到实际启用按钮的位置。所以我可能会遗漏一些东西,但只需在更改时启用按钮。如下所示:

function LoadMenu() {
    $("#pagedList").change(function () {
        var id = $(this).val();
        $("#url").val('/pages/' + id);
        // remove the disabled attribute here
        $('button.space').removeAttr('disabled');
    });
}