データバインディングにknockoutJSを使用しています。私はコメントのリストをループし、各コメントにmdl-menuを使用して、編集や削除のようなコメントの管理オプションを提供し、対応するコメントidに従って各コメントのメニューアイコンのidを設定しています。したがって、idのコメント1番目のコメントは「コメント1」、「for」属性の「mdl」メニューリストは「コメント1」となります。メニューアイコンをクリックすると、componentHandler.upgradeDom()を使用して要素を再度登録しますが、メニューはまだ開きません。データバインディングによってIDが動的に設定されている場合、mdl-menuリストが開かない
0
A
答えて
0
バインディングハンドラを使用して試行しました。メニューアイコンをクリックするとメニューが表示されます。追加ボタンをクリックして新しいメニュー項目を追加します。
あなたは以下を実行することができ、またはあなたがjsfiddleでそれを変更したい場合は、それは我々がより多くの情報(エラーメッセージ、コードサンプルなど)を必要とする、ここでhttps://jsfiddle.net/7zop2n9j/7/
ko.bindingHandlers.mdmemenu = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
ko.bindingHandlers.value.init(element, valueAccessor, allBindings);
var source = allBindings.get('menuOptions');
var sourceUnwrapped = ko.unwrap(source);
var myId = valueAccessor()();
var myHtml = '<button id = "'
myHtml = myHtml + myId;
myHtml = myHtml + '"'
myHtml = myHtml + 'class="mdl-button mdl-js-button mdl-button--icon">';
myHtml = myHtml + ' <i class="material-icons">more_vert</i>'
myHtml = myHtml + '</button>'
myHtml = myHtml + ' <ul class="mdl-menu mdl-menu--bottom-left mdl-js-menu mdl-js-ripple-effect"'
myHtml = myHtml + 'for = "'
myHtml = myHtml + myId;
myHtml = myHtml + '"'
myHtml = myHtml + '</ul>'
$(element).append(myHtml);
componentHandler.upgradeDom();
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
var value = valueAccessor();
ko.bindingHandlers.value.update(element, valueAccessor);
$(element).empty();
var source = allBindings.get('menuOptions');
var sourceUnwrapped = ko.unwrap(source);
var myId = valueAccessor()();
var myHtml = '<button id = "'
myHtml = myHtml + myId;
myHtml = myHtml + '"'
myHtml = myHtml + 'class="mdl-button mdl-js-button mdl-button--icon">';
myHtml = myHtml + ' <i class="material-icons">more_vert</i>'
myHtml = myHtml + '</button>'
myHtml = myHtml + ' <ul class="mdl-menu mdl-menu--bottom-left mdl-js-menu mdl-js-ripple-effect"'
myHtml = myHtml + 'for = "'
myHtml = myHtml + myId;
myHtml = myHtml + '"'
$.each(sourceUnwrapped, function(i, item) {
myHtml = myHtml + '<li class="mdl-menu__item">' + item.myText() + '</li>'
});
myHtml = myHtml + '</ul>'
$(element).append(myHtml);
componentHandler.upgradeDom();
}
};
function menuOption(myText) {
var self = this;
this.myText = ko.observable(myText);
}
function model() {
var self = this;
this.menuOptions = ko.observableArray()
this.myId = ko.observable('demo-menu-lower-left');
this.addRow = function() {
self.menuOptions.push(new menuOption('new menu item'));
}
}
var myViewModel = new model();
$(document).ready(function() {
ko.applyBindings(myViewModel);
myViewModel.menuOptions.push(new menuOption('Some Action'));
myViewModel.menuOptions.push(new menuOption('Another Action'));
myViewModel.menuOptions.push(new menuOption('Disabled Action'));
myViewModel.menuOptions.push(new menuOption('Yet Another Action'));
});
<link href="https://code.getmdl.io/1.3.0/material.indigo-pink.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.getmdl.io/1.3.0/material.min.js"></script>
<div data-bind="mdmemenu: myId, menuOptions: menuOptions "></div>
<button class="mdl-button mdl-js-button mdl-button--fab mdl-button--colored">
<i class="material-icons" data-bind="click:addRow">add</i>
</button>
関連する問題
- 1. HMENUのIDが設定されていない場合、
- 2. request.get()がパラメータが設定されていない場合にフィルタ
- 3. フレックスベーシスが0に設定されている場合、親コンテナに子が入っていないフレックス
- 4. 開始点が変数値に設定されているID
- 5. select2 allowClearは、オプションが動的に設定されている場合に有効にされません。
- 6. テキストフィールドの型が自動的にhh:mmのように書式設定されている場合
- 7. 所有者が設定されていない場合のループバック
- 8. SqlとPHPが設定されていない場合
- 9. Fancyboxはiframe閉じるボタンshowCloseButtonが「偽」に設定されている場合が隠されていない
- 10. QComboBoxが編集可能に設定されている場合
- 11. ModelBinderが正しくリストにバインドされていない場合
- 12. IDのリストがある場合、getResourcesに未公開のIDが表示されない
- 13. アプリケーションによって設定されていない場合はApacheヘッダーを追加してください。
- 14. 値がまだ設定されていない場合にのみ、値を設定してください
- 15. LESS変数が設定されていない場合に設定してください
- 16. oracleデータベースにテーブルが自動的に作成されていない場合は、
- 17. SASS、SUSY、RTL - [dir = "rtl"]が動的に設定されている場合に特定のレイアウトルールを設定しようとしています
- 18. ckanext-harvest:収穫源に「設定」が設定されている場合のエラー
- 19. Entity Frameworkの移行によって自動的にデフォルトが設定される
- 20. サイドバーメニューが動的に作成されている場合、コンテンツがダッシュボード本体に表示されない
- 21. CSSセレクタ - クラスの後にコンテンツが設定されていない場合
- 22. 条件が設定されていない場合、MainFormに戻ります。
- 23. Python dateparser - 日が '00'に設定されていない場合は
- 24. Grails:parent id nullオブジェクトがリストされているオブジェクトがnullの場合
- 25. JSFページがj_security_checkによって保護されている場合、ViewExpiredExceptionがajaxリクエストでスローされない
- 26. プロパティが既に設定されている場合、関数が呼び出されないようにするにはどうすればよいですか?
- 27. const配列のデフォルト値(すべてのインデックスが明示的に設定されていない場合)?
- 28. 複雑なsql:結合テーブルの値が結合テーブルに設定されている場合、値は結合テーブルに設定されています。
- 29. feedbackがoracleにデフォルト値を持っていますか?yesの場合、設定されていますか?
- 30. MVCのURLにidが指定されていない場合の静的ビューへのリダイレクト
です –