【发布时间】:2016-08-10 00:05:46
【问题描述】:
我一直在尝试订阅下拉值何时更改。我有以下逻辑,但我似乎无法让它工作。
HTML
<div id="case-pin-@modelItem.CaseID" data-caseid="@modelItem.CaseID" class="row hidden popovercontainer pinBinding">
<select data-bind="options:userPins,
value:selectedPin,
optionsCaption:'-- please select --',
optionsText: 'Name',
optionsValue: 'Id'"></select>
</div>
JS
function UserPinViewModel(caseId) {
var self = this;
self.selectedPin = ko.observable();
self.userPins = ko.observableArray([]);
self.caseId = caseId;
self.selectedPin.subscribe(function (newValue) {
console.log(newValue);
//addCaseToPin(newValue, self.caseId);
});
}
var pinObjs = [];
$(function () {
pinObjs = [];
$(".pinBinding").each(function () {
var caseId = this.getAttribute("data-caseid");
var view = new UserPinViewModel(caseId);
pinObjs.push(view);
ko.cleanNode(this);
ko.applyBindings(view, this);
});
})
userPins 数组由对服务器的 AJAX 调用填充,因为下拉列表中的值取决于网站的另一个部分,该部分可以更改下拉列表中的值 - 这里是我用来填充数组的逻辑。
function getPins() {
$.ajax({
type: 'POST',
url: '/Home/GetPins',
success: function (data) {
for (var i = 0; i < pinObjs.length; i++) {
pinObjs[i].userPins(data);
}
},
error: function (request, status, error) {
alert("Oooopppppsss! Something went wrong - " + error);
}
});
}
下拉列表中的实际值都会更改以匹配从服务器返回的值,但是每当我手动更改下拉列表时,都不会触发订阅事件。
【问题讨论】:
-
所以你没有在console.log上得到任何东西?你可以发布小提琴吗?
-
它在这里工作jsfiddle.net/kyr6w2x3/39
-
是的 - 我也让它在小提琴中孤立地工作,但是使用完全相同的逻辑,它在它实现的主应用程序中不起作用