使用Knockout ViewModelBase进行JavaScript调用或应用

时间:2014-07-02 16:57:21

标签: javascript knockout.js

我有这个基本视图模型:

var baseViewModel = function () {
    var self = this;

    // <!----- AJAX SAVING ------!> \\
    self.saving = ko.observable();

    // <!----- SEARCHING ------!> \\
    self.fields = ko.observableArray();
    self.selectedField = ko.observable();
    self.searchTerm = ko.observable().extend({ throttle: 150 });
}

我用这个继承它:

var viewModel = function () {
    baseViewModel.call(this);
    var self = this;

    //stufff
}
viewModel.prototype = new baseViewModel();

它完美无缺。很高兴。

现在,我想设置self.fields属性,其中包含一些初始数据,我想通过第baseViewModel.call(this)行发送,我不知道是否要执行此操作:

var viewModel = function () {
    baseViewModel.call(this, new userModel()); // just a function object
    var self = this;
}

OR:

var viewModel = function () {
    baseViewModel.apply(this, new userModel()); // just a function object
    var self = this;
}

以便baseViewModel执行此操作:

var baseViewModel = function (data) {
    var self = this;

    // <!----- AJAX SAVING ------!> \\
    self.saving = ko.observable();

    // <!----- SEARCHING ------!> \\
    self.fields = ko.observableArray().getKeys(data); // viewModel parameter passed here
    self.selectedField = ko.observable();
    self.searchTerm = ko.observable().extend({ throttle: 150 });
}

我已经读过这个Difference between call and apply仍然不知道该去哪里,我已经阅读了官方文档。

修改

我刚试过call因为据我所知,唯一的区别就是放入一堆或args(使用call)或放入一个args数组(apply

到目前为止,它与call合作,只是想知道选择这种方法是否会有任何警告?

1 个答案:

答案 0 :(得分:0)

除非有任何警告,否则唯一的区别是args是否为和数组或单独的对象

Call Link

Apply Link

call baseViewModel.call(this [, arg1, arg2, .... argn])

apply baseViewModel.apply(this [, arg_array[] ])