【问题标题】:vue js jquery switchervue js jquery 切换器
【发布时间】:2016-01-11 06:18:30
【问题描述】:

我正在尝试绑定一个复选框数组,同时使用一个名为 switcher 的 jQuery 插件(它也被 Pixel Admin 主题包装)。 我的问题是它没有初始化插件。

HTML

<div v-for="partnerType in partnerTypes" class="panel-body">
    {{ partnerType.name }}
    <span class="pull-right">
        <input name="types[]" type="checkbox"
            value="{{partnerType.id}}"
            v-checkbox
            v-model="checkedPartnerTypes"
            v-on:change="updatePartnershipPartnerType(partnerType)">
    </span>
</div>

<script src="/javascripts/custom/directives/checkbox.js"></script>
<script src="/javascripts/custom/companies/show.js"></script>

checkbox.js

Vue.directive('checkbox', function(value) {
    $(this.el).switcher({
        theme: 'modern',
        on_state_content: '',
        off_state_content: ''
    });

    if(value)
        $(this.el).addClass('checked');
    else
        $(this.el).removeClass('checked');
});

show.js 文件中,我基本上有一个checkedPartnerTypes: [] 数组,我最初和每次请求后都会更新它。

【问题讨论】:

    标签: javascript jquery vue.js


    【解决方案1】:

    您的指令永远不会真正更新,因为您没有将值传递给v-checkbox。您使用的速记是在您只需要 update 方法时使用的。

    您可能只想在bind 中执行类似的操作,因为插件似乎会检测元素是否被选中。

    Vue.directive('checkbox', {
      bind: function () {
        $(this.el).switcher();
      }
    });
    

    这样只会应用一次。

    【讨论】:

    • 我不得不通过 jQuery 手动更新其状态(还将选中的类添加到父元素)。但是,不同之处在于,我没有告诉指令复选框是否被选中,所以我最终只是将其状态作为布尔值传递给v-checkbox="typeIsChecked(partnerType.id)",现在它工作得很好!谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-04-13
    • 2016-10-31
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2021-07-29
    相关资源
    最近更新 更多