Javascript 敲除在viewmodel中使用外部函数

Javascript 敲除在viewmodel中使用外部函数,javascript,knockout.js,Javascript,Knockout.js,我是knockout.js的新手,在视图模型和外部函数方面遇到了一些问题。我想在视图模型中使用一个声明为属性的外部函数 function testViewModel(i){ self.PositionTimestamp = ko.observable((i.PositionTimestamp == null) ? '-' : moment(i.PositionTimestamp).tz(sitetz).format('YYYY-MM-DD HH:mm:ss'));

我是knockout.js的新手,在视图模型和外部函数方面遇到了一些问题。我想在视图模型中使用一个声明为属性的外部函数

    function testViewModel(i){
        self.PositionTimestamp = ko.observable((i.PositionTimestamp == null) ? '-' : moment(i.PositionTimestamp).tz(sitetz).format('YYYY-MM-DD HH:mm:ss'));
        self.PositionTimestampG = ko.observable((i.PositionTimestampG == null) ? '-' : moment(i.PositionTimestampG).tz(sitetz).format('YYYY-MM-DD HH:mm:ss'));
        self.IsTimeout = ko.observable(ComputeTimeout(i)); 

        self.update=function(data){
             self.PositionTimestamp((data.PositionTimestamp == null) ? '-' : moment(data.PositionTimestamp).tz(sitetz).format('YYYY-MM-DD HH:mm:ss'));
             self.PositionTimestampG((data.PositionTimestampG == null) ? '-' : moment(data.PositionTimestampG).tz(sitetz).format('YYYY-MM-DD HH:mm:ss'));
             self.IsTimeout(data.IsTimeout);
        }
    }
这一外部功能:

function ComputeTimeout(i) {
    var loct = moment().tz(sitetz);
    var lastWiFiTime; var lastGSMTime;
    var m_w = moment.tz(i.PositionTimestamp());
    var m_g = moment.tz(i.PositionTimestampG());
    lastGSMTime = loct.diff(m_g, 'seconds'); lastWiFiTime = loct.diff(m_w, 'seconds');

    if (isNaN(lastGSMTime))
        lastGSMTime = Number.MAX_VALUE;
    if (isNaN(lastWiFiTime))
        lastWiFiTime = Number.MAX_VALUE;

    if (lastGSMTime <= 30 * 60 || lastWiFiTime <= 30 * 60)
        return 0;
    if ((lastGSMTime > 30 * 60 && lastGSMTime <= 90 * 60) && (lastWiFiTime > 30 * 60 && lastWiFiTime <= 30 * 60))
        return 1;
    if (lastGSMTime > 90 * 60 && lastWiFiTime > 90 * 60)
        return 2;
}
函数ComputeTimeout(i){
var loct=力矩().tz(sitetz);
var lastWiFiTime;var lastGSMTime;
var m_w=矩.tz(i.位置时间戳());
var m_g=力矩.tz(i.位置时间戳();
lastGSMTime=loct.diff(m_g,'秒');lastWiFiTime=loct.diff(m_w,'秒');
if(isNaN(lastGSMTime))
lastGSMTime=Number.MAX\u值;
如果(isNaN(lastWiFiTime))
lastWiFiTime=Number.MAX\u值;
如果(lastGSMTime 90*60)
返回2;
}
我得到了一个错误:
JavaScript运行时错误:函数应为

这是因为我没有在视图模型中正确使用该函数


谢谢

i不是敲除变量=>PositionTimestamp不是函数

function ComputeTimeout(i) {
    var loct = moment().tz(sitetz);
    var lastWiFiTime; var lastGSMTime;
    var m_w = moment.tz(i.PositionTimestamp);
    var m_g = moment.tz(i.PositionTimestampG);
    lastGSMTime = loct.diff(m_g, 'seconds'); lastWiFiTime = loct.diff(m_w, 'seconds');

    if (isNaN(lastGSMTime))
        lastGSMTime = Number.MAX_VALUE;
    if (isNaN(lastWiFiTime))
        lastWiFiTime = Number.MAX_VALUE;

    if (lastGSMTime <= 30 * 60 || lastWiFiTime <= 30 * 60)
        return 0;
    if ((lastGSMTime > 30 * 60 && lastGSMTime <= 90 * 60) && (lastWiFiTime > 30 * 60 && lastWiFiTime <= 30 * 60))
        return 1;
    if (lastGSMTime > 90 * 60 && lastWiFiTime > 90 * 60)
        return 2;
}
函数ComputeTimeout(i){
var loct=力矩().tz(sitetz);
var lastWiFiTime;var lastGSMTime;
var m_w=力矩tz(即时间戳);
var m_g=力矩tz(i.g);
lastGSMTime=loct.diff(m_g,'秒');lastWiFiTime=loct.diff(m_w,'秒');
if(isNaN(lastGSMTime))
lastGSMTime=Number.MAX\u值;
如果(isNaN(lastWiFiTime))
lastWiFiTime=Number.MAX\u值;
如果(lastGSMTime 90*60)
返回2;
}

我们可以看到您的标记,以及您在哪里构建
testViewModel
?看起来您的视图模型中缺少了一个
var self=this
!我在视图模型中有
var self=this
,还有其他属性,我忘了放进去。PositionTimeStamp是通过控制器从数据库接收的一个字段。作为
i
参数传递给
testViewModel
?DB中当前项的信息。
var m_w=moment.tz(i.PositionTimeStamp())应该是
var m_w=moment.tz(i.PositionTimestamp)