Вызов функции из наблюдаемого массива Knockout

У меня есть наблюдаемый массив Knockout, который я хочу редактировать как из Javascript, так и из HTML. Вот мой код:

var ListModel = function(formula) {
  var self = this;
  self.formula = ko.observableArray(formula);

  this.mergeEquation = function(op) {
    if (op.type == "ins") {
      self.formula.splice(op.position, 0, op.value);
    } else if (op.type == "del") {
      self.formula.splice(op.position, 1);
    } else {
      console.info("No match: " + op.value + op.position);
    }
  };
};

Моя переменная op - это строка JSON. Я знаю, как вызвать функцию mergeEquation с помощью привязки данных HTML, но как мне это сделать из того же файла JS? Мой текущий код выглядит примерно так:

ko.applyBindings(new ListModel(formula));
//...
//initializing of JSON object called op
//...
if (something) {
  mergeEquation(op);
}

но это не работает. Я что-то упустил? Я прочитал о функциях и extenders, но оба кажутся слишком излишними для того, что я пытаюсь сделать здесь.

PS: Вот образец структуры JSON, с которой я работаю:

{"type":"ins", "clientID":1223, "version":0, "value":"hi", "position":0, "id":2736}

person Wei Hao    schedule 11.06.2012    source источник
comment
вам нужно показать часть, в которой вы создаете ListModel, и где вы пытаетесь вызвать mergeEquation по отношению к нему :)   -  person Keith Nicholas    schedule 11.06.2012
comment
О верно. Отредактирую свой пост, чтобы было понятнее.   -  person Wei Hao    schedule 11.06.2012


Ответы (1)


изменять :-

ko.applyBindings(new ListModel(formula));

to

  var vm = new ListModel(formula);
   ko.applyBindings(vm);

Итак, теперь vm - это то, что вы можете назвать уравнением слияния

vm.mergeEquation(op)
person Keith Nicholas    schedule 11.06.2012