Когда я пытаюсь использовать раскрывающийся список javascript materializecss (http://materializecss.com/dropdown.html) в коде, который динамически генерируется привязкой forock для нокаута, выпадающие параметры не отображаются при нажатии на триггер спуска.knockoutjs and materializecss javascript dropdown
<ul class="list" data-bind="foreach: items">
<li>
<!-- Dropdown Trigger -->
<a class='dropdown-button btn' href='#'
data-bind="attr: {'data-activates': 'dropdown' + $index()}">Drop Me!</a>
<!-- Dropdown Structure -->
<ul data-bind="attr: {id: 'dropdown' + $index()}" class='dropdown-content'>
<li><a href="#!">one</a></li>
<li><a href="#!">two</a></li>
<li><a href="#!">three</a></li>
</ul>
</li>
</ul>
Materializecss говорит выпадающий должен быть инициализирован с
$(".dropdown-button").dropdown();
Однако, это, кажется, не имеют никакого эффекта.
Любая помощь будет оценена по достоинству. Мне не удалось найти помощь на форумах нокаутов или в других местах.
EDIT - полная рабочая модель
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<!--Import Google Icon Font-->
<link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.6/css/materialize.min.css">
</head>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.6/js/materialize.min.js"></script>
<script >
function ItemsViewModel() {
var that = this;
function collectionItem(root, title) {
var self = this;
self.title = ko.observable(title);
};
that.items = ko.observableArray();
that.loadItems = function() {
for (var i = 0, j = 5; i < j; i++) {
that.items.push(new collectionItem(that,"title"+ i.toString()));
}
};
};
ko.bindingHandlers.materializeDropdown = {
init: function (element, valueAccessor) {
$(element).dropdown();
},
update: function (element, valueAccessor, allBindings) {
}
};
var itemsViewModel;
$(document).ready(function() {
itemsViewModel = new ItemsViewModel();
ko.applyBindings(itemsViewModel, $("#divForItemsViewModel").get(0));
itemsViewModel.loadItems();
});
</script>
<div id="divForItemsViewModel">
<ul class="list" data-bind="foreach: items">
<li>
<div data-bind="text:title"></div>
<!-- Dropdown Trigger -->
<a class='dropdown-button btn' href='#'
data-bind="attr: {'data-activates': 'dropdown' + $index()}, materializeDropdown">Drop Me!</a>
<!-- Dropdown Structure -->
<ul data-bind="attr: {id: 'dropdown' + $index()}" class='dropdown-content'>
<li><a href="#!">one</a></li>
<li><a href="#!">two</a></li>
<li><a href="#!">three</a></li>
</ul>
</li>
</ul>
<a class='dropdown-button btn' href='#'
data-activates="dropdownx">Drop Me THIS WORKS</a>
<ul id="dropdownx" class='dropdown-content'>
<li><a href="#!">one</a></li>
<li><a href="#!">two</a></li>
<li><a href="#!">three</a></li>
</ul>
</div>
</body>
</html>
Ваш * вопрос * технически не обман, но я почти дословно повторю [этот ответ, который я написал некоторое время назад] (http://stackoverflow.com/a/34394679/419956). – Jeroen
Спасибо, Jeroen. Да, прежде чем отправлять этот вопрос, я изучил ваш ответ, и я просто попробовал пользовательскую привязку Fede, но он, похоже, не помог. Ключ к связыванию триггера с контентом - это привязка данных к триггеру и привязка идентификатора к цели. Значения должны быть одинаковыми. Думаю, я правильно их установлю. –
Использование пользовательского связывания для интеграции этого плагина пользовательского интерфейса примерно обязательно. Инициализация его, как вы, будет, насколько я думаю, никогда не работает. В любом случае (с пользовательской привязкой или без нее) было бы полезно, если бы вы могли распространить код вопроса на [mcve]. – Jeroen