Javascript 在敲除中将子(嵌套)视图模型设置为null

Javascript 在敲除中将子(嵌套)视图模型设置为null,javascript,knockout.js,Javascript,Knockout.js,我已将viewModels定义如下: var uiViewModel = { updateLive: ko.observable(true), sendEnabled: ko.observable(true) }; var JobViewModel = function () { this.ID = ko.observable(); this.EndedAt = ko.observable(); this.StartedAt = ko.observabl

我已将viewModels定义如下:

var uiViewModel = {
    updateLive: ko.observable(true),
    sendEnabled: ko.observable(true)
};

var JobViewModel = function () {
    this.ID = ko.observable();
    this.EndedAt = ko.observable();
    this.StartedAt = ko.observable();
};

var viewModel = {
    ui: uiViewModel,
    job: new JobViewModel()
};

ko.applyBindings(viewModel);

// Callback function from AJAX call
var _ResultLastJob = function (result) {
    if (result.success) {
        if (result.job == "null") {
            // What happens if returned job object is null?
            viewModel.job = null;
            // OR reset the object
            //viewModel.job.ID(null);
            //viewModel.job.StartedBy("");
        }
        else {
            var jobData = JSON.parse(result.job);
            if (viewModel.job == null) {
                // If job was null create a new one, 
                //  however, this will not be bound to KO
                var newJob = new JobViewModel();
                viewModel.job = newJob;
            }
            ko.mapping.fromJS(jobData, {}, viewModel.job);
        }
    }
}

// Somewhere I call to get result, this is called periodically on the same page
$.get(url, _ResultLastJob);
我定期调用ajax函数来获取作业的值。在回调中,我将设置job的值。然而,在一些获取调用期间,我可以为作业视图模型获取
null
值。处理这种情况的最佳方法是什么?我应该设置
job=null
(然后我会丢失绑定的对象),还是需要手动重置视图模型值,并在UI中检测到没有为
job
视图模型返回任何对象

还有其他办法解决这个问题吗?我是个新手

编辑:
下面是定期获取期间的结果列表,我需要基于此更新视图模型

|Request | result | ------------------- | 1 | non-null | | 2 | non-null | | 3 | null | | 4 | null | | 5 | non-null | |请求|结果| ------------------- |1 |非空| |2 |非空| |3 |零| |4 |零| |5 |非空|
我可以建议您始终创建
JobViewModel
,但在
ResultLastJob
方法中初始化它。当从服务器接收的数据为空时,
JobViewModel
将使用默认值初始化。此解决方案的主要优点是视图上有一个逻辑(您不应该添加任何检查
JobViewModel
是否不为null等):


显示您的视图模型的完整代码,对于我来说不清楚,您如何获取作业视图模型的数据!?视图模型在我发布时已完成。但是我已经为回调函数添加了代码,在这里我需要更新视图模型。谢谢你的回复。抱歉,我忘了提到我定期调用getJSON函数。因此,我可能在第三次或第四次通话中得到空值。在这种情况下,
init
需要重置所有字段。这就是我的问题,我必须手动重置每个字段,还是我可以只设置
viewModel.job=null
。不,你不能设置
viewModel.job=null
,你应该手动重置viewModel。除了重置所有属性,还有其他选择吗?
var UiViewModel = function() {
    var self = this;
    self.updateLive = ko.observable(true);
    self.sendEnabled = ko.observable(true);
};

var JobViewModel = function () {
    var self = this;
    self.ID = ko.observable();
    self.EndedAt = ko.observable();
    self.StartedAt = ko.observable();

    self.init = function(data) {
        self.ID(data ? data.ID : null);
        self.EndedAt(data ? data.EndedAt : null);
        self.StartedAt(data ? data.StartedAt : null);
    }   
};

var viewModel = {
    ui: new UiViewModel(),
    job: new JobViewModel()
};



var _ResultLastJob = function (result) {
    if (result.success) {
        viewModel.job.init(result.job);
    }
}