Day26 - 轻前端 Component - jQuery UI Selectmenu

这个范例把上个范例的 jQuery UI Selectmenu 放到 vue component 内

就可以做到关注点分离 !


Case01

建立 jquery-ui-select-menu.js

  • 把订单项目下拉选单放在这个 component 内 !

  • 因为 component 可视为与 Domain 无关,就可以做为共用元件,因此变数命名上,就不需要有 Domain 意图的名称了 !

    const jquery_ui_select_menu = {
        template: `
          <select v-bind:id="id"
                  v-model="modelValue">
              <option value="null">请选择</option>
              <option v-for="(item, item_index) in options"
                      v-bind:key="item.Value"
                      v-bind:value="item.Value">
                  {{ item.Text }}
              </option>
          </select>
        `,
        props: {
            id: String,
            options: Array,
            modelValue: String,
            width: Number,
        },
        setup(props, {emit}) {
    
            let dom = null;
    
            onMounted(() => {
                dom = $("#"+ props.id);
                dom.selectmenu({
                    width: props.width,
                    change: function (event, ui) {
                        emit('update:modelValue', parseInt(ui.item.value));
                    }
                });
            })
    
            return {
            }
        },
    }
    

View

  • 引用上述 component

    原本 vue 指定 mount 的地方上面加上 js script 的引用

    </script>
    <script src="/lib/jquery-ui-select-menu.js?20210608001"></script>
    <script>
      app.component("jquery-ui-select-menu", jquery_ui_select_menu);
    
      const vm = app.mount('#app');
    </script>
    
  • 订单项目下拉选单就改为使用上述的 component

    • v-model - 直接绑定指定的 Property,因此不需要上个范例的 item-index 相关的语法了 !
    • id - 主要是用於 jQuery UI Selectmenu 初始化要用,避免给定相同的 id
    • options - 下拉选单项目。项目的 Text 为显示文字、Value 为项目的值 !
    • width - 指定下拉选单的宽度
      <td>
        <jquery-ui-select-menu
            v-model="item.OrderItemId"
            v-bind:id="'select-menu-'+index"
            v-bind:options="order_items"
            v-bind:width=200
        ></jquery-ui-select-menu>
    </td>
    

这篇先到这里,下一篇来看看把 jQuery UI Selectmenu 放到 Vue Component 内 !


<<:  用一半的时间做两倍的事

>>:  Flutter体验 Day 18-路由导览v2

自动化 End-End 测试 Nightwatch.js 与 BrowserStack

前一篇提到可以更改 session name 也可以标注 pass/fail 接着就可以将昨天提到的...

Day11【Web】网路攻击:XSS

XSS 全称为 Cross-site scripting 中文为「跨站脚本攻击」。 通常是指利用网页...

[重构倒数第15天] - Vue3处理动态效果(一)

前言 该系列是为了让看过Vue官方文件或学过Vue但是却不知道怎麽下手去重构现在有的网站而去规画的系...

网路常常不稳的天涯若比邻

如果你问上班族,公司的网路稳不稳?喜不喜欢视讯开会?大概八成以上持否定的态度。另外,在号称大云端、大...

[05] [Flask 快速上手笔记] 04. HTTP 方法x静态文件x渲染模板

HTTP 方法 在预设情况下 Flask 路由的 HTTP 方法只允许 GET 可以透过route(...