2012-03-28 124 views
1

我想打個招呼到stackoverflow社區。更新字段與jQuery不更新可觀察

我剛剛開始使用淘汰賽前幾天。

我知道我正在使用它來爲我正在處理的CMS製作動態菜單生成器。

下面是代碼:http://jsfiddle.net/dnlgmzddr/HcRqn/

的問題是,當我選擇從選擇框中選擇一個元素,輸入字段更新如我所料,但可觀察到的不反映更改。因此,添加按鈕未啓用。

我錯過了什麼?我該如何解決它?

謝謝。

回答

8

當你填入URL字段中,您將需要觸發更改事件獲取要更新過的可觀察的。所以,你可以這樣做:

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

另一個選擇,雖然這是在淘汰賽精神更多的是在你的選擇使用綁定。在這種情況下,您可能希望使用該值填充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

我看不到你的代碼中的任何地方,當你選擇一個字段時,你實際上啓用了這個按鈕。所以我可能會錯過一些東西,但只是啓用更改按鈕。像下面這樣:

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