淘汰-使用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>