Я верю valueHasMutated()
, когда применяется к любому наблюдаемому или наблюдаемому массиву, он будет обновлять/перепроверять, я верю. В техническом плане он уведомляет подписчиков о необходимости переоценки.valueHasMutated не работает должным образом?
ViewModel:
var testing =function(){
var self=this;
self.status = ko.observable(1);
self.mainobseravle=ko.observableArray();
function subtest()
{
var self=this;
self.controlenable = ko.observable("");
self.statuschange = ko.computed(function(){
//Here i have to use `self.status` how can i use it below. #1
//if(self.status == 1 || self.status==4)
{return true;} else {return false;}
});
}
}
Мое мнение связывания на основе mainobservable
, которые имеют объект subtest
функции.
Ajax вызова
$.ajax({
//under success function
var d = new subtest();
d.controlenable(data.status);
self.mainobseravle.push(d);
});
Просмотр структуры:
<table data-bind="foreach:mainobseravle">
<tr><td> <input type="text" data-bind="enable:$data.controlenable" /> </td></tr>
</table>
<input type="button" value="forward" data-bind="click:$root.forward"/>
Кнопка Click:
self.forward = function(){
// i change the status here
self.status(2);
self.mainobseravle.valueHasMutated(); // this goes fine and my controls still enabled #2
}
Ну пусть м e делайте вещи более ясными, поскольку я хранил self.status()
в вариальном и использовал внутри subtest
функцию и сделал все, и я надеялся на чудо. valueHasMutated
работает, но ничего не работает.
В качестве вопроса о выпуске я не могу использовать self.status()
непосредственно внутри subtest
функция. если вы попробуете, это порождает неопределенную ошибку, поэтому я использую здесь переменную и альтернативу?
Если у меня нет ничего важного, пожалуйста, предложите.
thats один большой проницательность и дальше больше функция внутри функция плохая практика? Я верю, что я пытаюсь сделать здесь, как «нажатие экземпляра субтеста в наблюдаемый массив внутри тестирования».это фиктивное имя, но в реальной картине у меня есть много функций с соответствующими функциями (модели просмотра), которые имеют объекты, похожие на класс в контроллере, имеющие объекты модели сервера (модель сервера). onload У меня есть много вызовов ajax, где я получаю данные, и я должен строить свои данные в массиве наблюдений, который находится в основной области. –
, если вы заинтересованы, вы можете проверить мою структуру excat, попробуйте это http://stackoverflow.com/questions/ 25988238/long-time-running-script-while-binding-a-view-mvc. В этом 'self.MAINDATA' находится мой массив наблюдений, о котором я говорю здесь. каждый частичный вид отличается от функции 'subtest'. Я верю, что у меня нет выбора, я должен подтолкнуть свои данные к наблюдаемому массиву, который является основной функцией. кстати, структура петли будет на 5 уровне. любое предложение принято –
Я не имел в виду, что функция внутри функции плохая (это не так). Тем не менее, ваш 'subtest' имеет вычисленный, который обращается к' testing' (так что 'subtest' 'знает'' тестирование'). Но 'testing' также знает' subtest', так как он хранит 'subtest' в наблюдаемом массиве. Когда два модуля нуждаются друг в другом, что-то обычно неправильно. В этом случае 'subtest' НЕ должен знать' test', и поэтому вычисленный наблюдаемый должен быть помещен внутри 'test', а' subtest' не должен нажимать на наблюдаемый массив в 'test'. Вместо этого вы должны сделать что-то вроде 'test.pushSubTest (new subtest());' –