0

以下は Ojet コンポーネントです。「p_id」を OJet コンポーネントからメニューの「contextMenuItemSelect」関数に渡したいと考えています。

ui.item.children("a").text() は選択したオプションを取得できますが、それぞれのリスト項目の p_id を取得したいので、選択したオプションに基づいて編集または表示に移動します。

これはどのように行うことができますか??

Ojet コンポーネント

        <script type="text/html" id="server_template">
            <li data-bind="attr: {id: $data['p_id']}">
                <div class="oj-flex">

                    <div class="oj-lg-12 oj-md-12 oj-sm-12">
                        <div class="oj-flex row portfolio-list">
                            <!-- Portfolio Name and Description -->
                            <div class="oj-lg-4 oj-sm-12">
                                <h2>
                                    <a href="#" data-bind="text: p_id, click: getView"></a>
                                </h2>

                                <span class="data"><span data-bind="text: desc"></span></span>

                            </div>

                                <div id="menubutton-container">
                                    <button id="menuButton2"
                                      data-bind="

                                        ojComponent: {component: 'ojButton', display: 'icons', 
                                        icons: {start:'demo-icon-font demo-gear-icon-16'}, 
                                        label: 'Button with two icons and no text',
                                        menu: '#myMenu2'}">
                                    </button>

                                // The below span gives the list ID correctly

                                 <span data-bind="text: p_id"></span>

                                  <ul id="myMenu2"  data-bind="attr:{title: p_id},ojComponent: {component: 'ojMenu', select:contextMenuItemSelect}" style="display:none">

                                // The below span always gives the 1st id on the list

                                  <span data-bind="text: p_id"></span>
                                    <!-- ko template: {name: 'menuItemTemplate', foreach: items, as: 'item'} -->
                                    <!-- /ko -->
                                  </ul>
                                </div>

                        </div>


                    </div>
                </div>
            </li>
        </script>

メニュー テンプレート

<script type="text/html" id="menuItemTemplate">
  <li data-bind="css: {'oj-disabled': item.disabled}">
  <a href="#" data-bind="text: name"></a>
  <!-- ko if: item.items -->
   <ul data-bind="template: {name: 'menuItemTemplate', foreach: item.items, as: 'item'}">
   </ul>
 <!-- /ko -->
 </li>

JS 関数

self.contextMenuItemSelect = function( event, ui ) {

      console.log(ui.item);
      var option = ui.item.children("a").text();
  }
4

1 に答える 1

0

これらのスニペットの代わりに実際に動作するコードを試してみると役に立ちますが、最初に試みることは、(ojMenu バインディングを持つ) UL 要素に一意の ID 属性があることを確認することです。サンプル コードから、すべてのメニューが同じ ID "myMenu2" を共有しているように見えます。ojMenu が正確にどのように機能するかはわかりませんが、ID で要素を検索すると、問題が発生する可能性があります (さらに、ID が重複している場合、有効な HTML コードではありません)。

于 2016-09-21T05:55:00.523 に答える