, который сводит меня с ума ... Я проверил много сообщений, связанных с моим вопросом, но по-прежнему не могу исправить мою проблему. Одним словом: Я использую '$ .Ajax.BeginForm' для обновления моей модели наблюдаемого массива. Данные есть, таблица обновляется, но когда я проверяю длину этого массива, он остается 0! Что мне здесь не хватает?ObservableArray.length остается 0. Нокаут
здесь данные:
ViewModel:
<script type="text/javascript">
//VIEW MODEL DECLARATION:
var ViewModel = {
SubscriberEmail: ko.observable(""),
SubscriberLists: ko.observableArray([]),
UnsubscribeAll: ko.observable(false),
UpdateSubscriberLists: function()
{
$.ajax("/Home/UpdateSubscriptionInfo/", {
data: ko.toJSON({ lists: this.SubscriberLists }),
type: "post",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data)
{
$().toastmessage('showNoticeToast', data);
}
});
},
ProcessUnsubscribeAll: function() {
if (this.UnsubscribeAll)
{
alert('changing');
alert(ViewModel.SubscriberLists().length);
ko.utils.arrayForEach(ViewModel.SubscriberLists(), function (item)
{
alert("changing OptIn");
//item.OptIn = false;
});
};
}
};
//UTILITY FUNCTIONS:
function DisplayMessage(data)
{
$().toastmessage('showNoticeToast', data);
}
function ProcessListsReceived(data)
{
ViewModel.SubscriberLists(ko.mapping.fromJSON(data));
}
//ON DOCUMENT LOADED:
$(document).ready(function()
{
ko.applyBindings(ViewModel);
});
</script>
Часть, которая требует обновления:
<div class="navbar-right form-inline" style="margin-top: 10px;">
@using (Ajax.BeginForm("GetSubscriptionInfo",
new AjaxOptions
{
HttpMethod = "POST",
OnSuccess = "ProcessListsReceived"
}))
{
<div class="form-group">
<span class="glyphicon glyphicon-search"> </span>
<label class="sr-only" for="inputemail">Email address</label>
<input data-bind="text:SubscriberEmail" type="email" class="form-control input-sm" id="inputemail" name="inputemail" placeholder="Enter your email" style="width: 300px;">
</div>
<button type="submit" class="btn btn-default input-sm btn-primary" data-loading-text="Loading...">Get my subscriptions</button>
}
</div>
Функция, которая обновляет наблюдаемый массив, объявленный выше в разделе Javascript -
function ProcessListsReceived(data)
{
ViewModel.SubscriberLists(ko.mapping.fromJSON(data));
}
я кнопка привязана к длине массива .. он всегда остается отключен:
<button data-bind="click: UpdateSubscriberLists, enable: SubscriberLists().length > 0" type="button" class="btn btn-warning">Update subscription</button>
SO .... почему после обновления длины массива 0? Спасибо за любые советы!
AL