Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
472 views
in Technique[技术] by (71.8m points)

knockout.js - What is the easiest way to change data in one of the Knockout viewmodels while running in the browser?

I am running (my own built) KnockOut.JS application. What is the easiest way to CHANGE data in one of the viewmodels?

I do not have a global JS object I can change in the console, and I have multiple elements with their own binding. I can of course create a button and a method on the viewmodel, but I want to play around with some values on the viewmodel to see the effect in the UI.

Preferably in Chrome.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Normally you would apply the bindings in a manner similar to this:

 ko.applyBindings(new Model());

But then the reference to the model is not available to you later on. Instead, if you keep a copy of the reference variable generated by new Model() you can change the observables within it, or check their values for debugging. Here's the pattern I employ when I need my model accessible to external code.

var vm = new Model();
ko.applyBindings(vm);

Now, if you wanted you could check the values in vm or update the observables if you wish. See the example below.

var Model= function() {
  var self = this;
  
  self.test = ko.observable("Initial Value");
}

var vm = new Model();
ko.applyBindings(vm);

setInterval(function() {
  vm.test("Value updated from external code!");
  
  setTimeout(function() {
    vm.test("New Value from external code!");
  }, 1000)
}, 2000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<input type="text" data-bind="textInput: test" />
<br/>
<span data-bind="text: test"></span>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...