Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加带有css绑定的动态类_Css_Class_Magento_Knockout.js_Data Binding - Fatal编程技术网

添加带有css绑定的动态类

添加带有css绑定的动态类,css,class,magento,knockout.js,data-binding,Css,Class,Magento,Knockout.js,Data Binding,我想在支付方法的后面添加一个类,该类带有敲除css绑定(在Magento 2.1中)。 这就是当前的代码: <div class="payment-method" data-bind="css: {'_active': (getCode() == isChecked())}"> <div class="payment-method-title field choice"> <input type="radio"

我想在
支付方法
的后面添加一个类,该类带有敲除css绑定(在Magento 2.1中)。 这就是当前的代码:

<div class="payment-method" data-bind="css: {'_active': (getCode() == isChecked())}">
    <div class="payment-method-title field choice">
        <input type="radio"
               name="payment[method]"
               class="radio"
               data-bind="attr: {'id': getCode()}, value: getCode(), checked: isChecked, click: selectPaymentMethod, visible: isRadioButtonVisible()"/>
但它失败的原因是:

knockout.js:2624未捕获语法错误:无法分析绑定。 绑定值:css:{“u活动”:(getCode()==isChecked()),getCode()} 消息:意外标记}


这很有效

<div class="payment-method" data-bind="css: {getCode()}">

这不是

<div class="payment-method" data-bind="css: {'_active': (getCode() == isChecked())}, attr: {'class': getCode()}">

这也起作用,但将覆盖
支付方法
类,并且
\u活动
类也不再初始设置


如何设置该动态类?

这段代码是多余的,因为css数据绑定将被attr绑定覆盖

<div class="payment-method" data-bind="css: {'_active': (getCode() == isChecked())}, attr: {'class': getCode()}">

这就是如何实现动态类(假设这些属性是可观察的):


self.CSS=ko.computed(函数(){
var code=self.getCode();
var isChecked=self.isChecked();
返回代码+''+(代码==isChecked?'\u active':'');
},视图模型);

来自@tyler_mitchell的评论帮助我通过以下线索找到了解决方案:

我可以做到:

<div class="payment-method" data-bind="attr: { 'class': 'payment-method ' + getCode() }, css: {'_active': (getCode() == isChecked())}">


不是很聪明,但很好…

如果有人需要,再举一个例子

<div data-bind="attr: { 'class': 'mainClass' + (dynamicClassSetOnce ? ' ' + dynamicClassSetOnce : '' }, css: { 'mainClass--focussed': isFocussed }">
...
</div>

...

谢谢,但假设我不能添加其他函数。根据文档,我可以设置多个css类。这对函数参数不起作用吗?不,您可以
->,但这可能不起作用,因为它是动态类和设置静态的混合体,所以最好在一个地方进行。我只想说这是一种更为理想的方式。因为这只是一个电话,而不是几个电话,所以我试过了,但出现了一个错误,我用准确的错误信息更新了我的问题。对我来说,这个错误意味着你不能混合静态和动态。做一个或另一个。如果您使用什么getcode和ischecked更新问题。我可以给你们精确的解决方案,但若你们能很容易地添加一个函数,我会按照泰勒·米切尔的建议去做。
<div class="payment-method" data-bind="css: CSS">

self.CSS = ko.computed(function() {
    var code = self.getCode();
    var isChecked = self.isChecked();
    return code + ' ' + (code == isChecked ? '_active' : '');
}, viewModel);
<div class="payment-method" data-bind="attr: { 'class': 'payment-method ' + getCode() }, css: {'_active': (getCode() == isChecked())}">
<div data-bind="attr: { 'class': 'mainClass' + (dynamicClassSetOnce ? ' ' + dynamicClassSetOnce : '' }, css: { 'mainClass--focussed': isFocussed }">
...
</div>