2015-06-29 154 views
0

我目前正在學習如何將knockoutJS合併到我的項目中,但是,我遇到了一個讓我難以理解的問題。計算可觀察不更新值

我有一個簡單的計算觀察,返回兩個連接字符串的值。我遇到的問題是該方法在視圖第一次加載時返回正確的值,但是,如果我更新函數中使用的某個observable,則不會顯示更新後的值。

index.cshtml

@model KnockoutProjectt.Models.Register 

<input type="text" data-bind="value: forename" /> 
<p data-bind="text: forename"></p> 
<p data-bind="text: getFullName"></p> 

@section Script { 
    <script src="~/Scripts/scripts.js"></script> 
    <script> 

    var options = { 
     forename: '@Html.Raw(Model.Forename)', 
     surname: '@Html.Raw(Model.Surname)', 
     email: '@Html.Raw(Model.Email)' 
    }; 

    var viewModel = init(options); 
    ko.applyBindings(viewModel); 

    </script> 
} 

scripts.js中

function init(options) { 

    var viewModel = { 
     forename: ko.observable(options.forename), 
     surname: ko.observable(options.surname), 
     email: ko.observable(options.email) 
    } 

    viewModel.getFullName = ko.computed(function() { 
     return options.forename + ' ' + options.surname; 
    }); 

    return viewModel; 
} 

任何幫助將不勝感激。

回答

1

問題是計算結果是基於在options對象上傳入的原始值而不是從它們創建的觀察值。你只需要更新它從可觀察的工作:

viewModel.getFullName = ko.computed(function() { 
    return viewModel.forename() + ' ' + viewModel.surname(); 
}); 
+0

jeez,我覺得自己像一個白癡。謝謝詹姆斯。 – tbonejenkins