淘汰-使用Ajax将数据加载到模型中-而不是立即
下面是我的淘汰模型的一个简化示例。我遇到的问题是,页面一加载,测验就加载了。为什么它会立即运行?我如何阻止它,使它只在我想要的时候运行,比如说,点击一个按钮 我是否需要使用淘汰-使用Ajax将数据加载到模型中-而不是立即,ajax,knockout.js,Ajax,Knockout.js,下面是我的淘汰模型的一个简化示例。我遇到的问题是,页面一加载,测验就加载了。为什么它会立即运行?我如何阻止它,使它只在我想要的时候运行,比如说,点击一个按钮 我是否需要使用subscribe来执行此操作 HTML: 测试 点击我 没有测验 测验已加载! 调试 Javascript: <script type="text/javascript"> var quizModel = { }; // DOM ready. $(function () {
subscribe
来执行此操作
HTML:
测试
点击我
没有测验
测验已加载!
调试
Javascript:
<script type="text/javascript">
var quizModel = { };
// DOM ready.
$(function () {
function QuizViewModel() {
var self = this;
self.loaded = ko.observable(false);
self.questions = ko.observable();
self.quizCount = ko.observable();
};
quizModel = new QuizViewModel();
quizModel.quizCount.subscribe(function (newCount) {
$.getJSON('@Url.Action("GetNew", "api/quiz")', function (data) {
quizModel.questions(data.Questions);
}).complete(function () {
quizModel.loaded(true);
});
});
ko.applyBindings(quizModel);
})
</script>
var quizModel={};
//准备好了。
$(函数(){
函数QuizViewModel(){
var self=这个;
自加载=可观察(假);
self.questions=ko.observable();
self.quizCount=ko.observable();
};
quizModel=新的QuizViewModel();
quizModel.quizCount.subscribe(函数(newCount){
$.getJSON('@Url.Action(“GetNew”,“api/Quike”)),函数(数据){
quizModel.问题(数据.问题);
}).完成(功能(){
quizModel.loaded(真);
});
});
ko.应用绑定(quizModel);
})
Subscribe仅用于侦听可观察对象中的更改,因此一旦可观察对象获得值,它将立即运行
您需要将此函数作为方法添加到viewmodel中,可能称为getQuestions:
function QuizViewModel() {
var self = this;
self.loaded = ko.observable(false);
self.questions = ko.observable();
self.quizCount = ko.observable();
self.getQuestions = function(){
$.getJSON('@Url.Action("GetNew", "api/quiz")', function (data) {
self.questions(data.Questions);
}).complete(function () {
self.loaded(true);
});
}
};
然后,您可以轻松地通过单击按钮或其他内容绑定到此方法:
<button data-bind="click: getQuestions">Get questions</button>
获取问题
<button data-bind="click: getQuestions">Get questions</button>