2017-02-21 53 views
0

我正在使用基于Django的Dashing框架。如何解析rivets.js的值?

HTML使用Rivets.js约定将数据绑定到脚本文件。

<div rv-status-color="value"> 
    <h1>{ title }</h1> 
    <h2>{ value }</h2> 
    <p class="detail">{ detail }</p> 
    <p class="more-info" rv-show="moreInfo">{ moreInfo }</p> 
    <p class="updated-at" rv-show="updatedAt">{ updatedAt }</p> 
</div> 
<i rv-class="icon" rv-show="icon"></i> 

以下脚本从HTML获取值并根据条件将必要的颜色设置为.css。

rivets.binders['status-color'] = function(el, value) { 
    if (value == 0) { 
     $(el).css('background-color', 'green'); 
    } 
    else if (value < 0) { 
     $(el).css('background-color', 'orange'); 
    } 
    else { 
     $(el).css('background-color', 'red'); 
    } 
}; 

您能否告诉我如何重写脚本以获取{detail}值并将其与{value}进行比较?

类似的东西:

rivets.binders['status-color'] = function(el, value) { 
    if (value == detail) { 
     $(el).css('background-color', 'green'); 
    } 
    else if (value < detail) { 
     $(el).css('background-color', 'orange'); 
    } 
    else { 
     $(el).css('background-color', 'red'); 
    } 
}; 

预先感谢您。

回答

0

您可以将对象传递给您的联编程序而不是静态值。

<div rv-status-color="yourObject"> 

然后使用对象的脚本

rivets.binders['status-color'] = function(el, obj) { 
    if (obj.value == obj.detail) { 
     $(el).css('background-color', 'green'); 
    } 
    else if (obj.value < obj.detail) { 
     $(el).css('background-color', 'orange'); 
    } 
    else { 
     $(el).css('background-color', 'red'); 
    } 
}; 
+0

感谢@Bigdragon非常的快回答!我已经尝试过,但它不起作用,这意味着当我使用** obj.value **或** obj.detail **时,该组件停止工作。 – Ndrew

+0

请确保你在'rv-status-color =“yourObject”' – Bigdragon

+0

中传递了正确的对象。亲爱的@Bigdragon也许我做了错误的事,但没有奏效。 – Ndrew

0

你只需要做到以下几点:

rivets.binders['status-color'] = function(el, value, scope) { //scope being the current bound object 
    var detail=scope.detail; 
    if (value == detail) { 
     $(el).css('background-color', 'green'); 
    } 
    else if (value < detail) { 
     $(el).css('background-color', 'orange'); 
    } 
    else { 
     $(el).css('background-color', 'red'); 
    } 
};