私の MVC4 アプリケーションの ViewModel には、ajax 呼び出しから名前を取得し、Bootstrap 3 を使用しているページ内の単純なコントロールを設定するためのコードがいくつかあります。ajax 呼び出しを使用すると、UI にデータが表示されますが、コントロールが更新されず、理由がわかりません。データが存在することを確認し、ajax 呼び出し内で self.Names = ko.observableArray を設定しようとしました。簡単な理由はありますか?前述したように、両方のシナリオでフォーム内にデータが表示されますが、期待どおりの更新が表示されません。
$(document).ready(function () {
function ViewModel() {
//Make the self as 'this' reference
var self = this;
//Declare observable which will be bind with UI
self.Name = ko.observable("");
var Names = {
Name: self.Name
};
self.Name = ko.observable();
//self.Names = ko.observableArray([{ Name: "Brian" }, { Name: "Jesse" }, { Name: "James" }]);
self.Names = ko.observableArray(); // Contains the list of Names
// Initialize the view-model
$.ajax({
url: '@Url.Action("GetNames", "Home")',
cache: false,
type: 'GET',
contentType: 'application/json; charset=utf-8',
data: {},
success: function (data) {
self.Names(data); //Put the response in ObservableArray
}
});
}
var viewModel = new ViewModel();
ko.applyBindings(viewModel);
});
ajax 呼び出しを介した本文からの応答は次のとおりです。
[{"Id":1,"Name":"Brian"},{"Id":2,"Name":"Jesse"},{"Id":3,"Name":"James"}]
私のHTML
<p>Current selection is <span data-bind="text:Name"></span></p>
<div class="container">
<div class="col-sm-7 well">
<form class="form-inline" action="#" method="get">
<div class="input-group col-sm-8">
<input class="form-control" placeholder="Work Section" name="q" type="text">
<div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">Select <span class="caret"></span></button>
<ul class="dropdown-menu" data-bind="foreach: Names">
<li class="dropdown">
<a href="#" data-bind="text: Name, value: Name, click: function() {$root.Name(Name);}"></a>
</li>
</ul>
<input name="category" class="category" type="hidden">
</div>
</div>