javascript - 在 Knockout 样式绑定(bind)中使用 javascript 函数

标签 javascript css knockout.js

我有一个 HTML 页面,我在其中对某些元素应用了一些 Knockout 绑定(bind):

<td class="tepvval" data-bind="text: tepv"></td>
<td class="dateval" data-bind="text: dueIn(due)"></td>

在第二个元素中,我调用了一个函数来填充元素的数据内容。我正在尝试对元素的样式做同样的事情,但我遇到了问题。我需要调用一个函数来计算日期(截止日期)和今天之间的差异,然后返回我想要用于元素背景的颜色 - 绿色截止日期超过 30 天,黄色截止日期为 30-15 天,橙色15-1天,红色逾期。

我试过用

<td class="dateval" data-bind="text: dueIn(due), 
                               style: { backgroundColor: colorDue(due) }"></td>

但这行不通。

语法中缺少什么?

这是我在 colorDue 中调用的函数代码:

function colorDue(due) {    
    rd = 1;     
    od = 15;    
    yd = 30; 
    var difference = dateDiff(due);  
    if (difference>yd) { color="green"; }  
    else if (yd>difference && difference>od) { color="yellow"; }  
    else if (od>difference && difference>rd) { color="orange"; } 
    else if (difference <=rd) { color="red"; } 
    return color; 
}  

function dateDiff(due) {    
    var  df, ymd, now, dateStr, diff;   
    df = due.split(" ");    
    ymd = df[0].split("-");     
    now = new Date();   
    dateStr = new Date(ymd[0],ymd[1],ymd[2],17,0,0);    
    diff = dateStr.getTime()-now.getTime();     
    diff = diff/86400000; 
    return diff; 
}

最佳答案

你的问题在这里:

dateStr = new Date(ymd[0],ymd[1],ymd[2],17,0,0);

在 js 中(不要问为什么),月从 0 开始(而日和年从 1 开始......)。参见 doc

month Integer value representing the month, beginning with 0 for January to 11 for December.

所以你需要一个-1:

dateStr = new Date(ymd[0],ymd[1] -1,ymd[2],17,0,0);

还有其他的东西你应该在这里改变,比如声明你的本地变量:

function colorDue(due) {    
    var rd = 1;     
    var od = 15;    
    var yd = 30; 
    var color = "";
    //...
}

关于javascript - 在 Knockout 样式绑定(bind)中使用 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24313071/

相关文章:

datagrid - knockout : The SimpleGrid component

javascript - Node 日志记录和错误处理

javascript - 如何访问函数返回的数组中的数据?

css - 有没有一种方法可以仅使用 css 在 float 对象上设置动画转换?

html - Bootstrap 列宽

Javascript String.fromCharCode 返回错误值

javascript - getPrototypeOf 与 isPrototypeOf

javascript - redux-form 和 React 小部件的日历 - String 类型的无效 prop 值

javascript - 一个弹框只能用三个弹框的代码怎么实现?

asp.net-mvc - Internet Explorer 中的 knockout 验证错误?