运行 创建挖空组件时的外部函数
Run external function when knockout component is created
我正在尝试在 knockout 中创建新组件:
ko.components.register("categories", {
viewModel: {
instance: MY_VIEW_MODEL
},
template: require('html-loader?interpolate!./components/categories.html')
});
和我的 HTML 块在 categories.html:
内
<div class="panel" data-bind="foreach: categories, afterRender: ${require('../effects.js').fadePanels()}"></div>
和effect.js内部:
function fadePanels() {
$('.panel').velocity('fadeInPanels', {
stagger: 250,
})
}
加webpack.config.js:
test: /\.html$/,
loader: 'html-loader',
options: {
interpolate: true
},
exclude: /node_modules/
但它根本不起作用。这是浏览器的输出(控制台中没有错误):
你有这方面的经验吗?你知道如何正确处理吗?
您可以 运行 使用 createViewmodel
工厂方法获取组件元素的函数。此函数接收一个包含当前 element
的信息对象。
ko.components.register("category", {
viewModel: {
createViewModel: (params, info) => {
fadeIn(info.element);
return { label: "hello world" }
}
},
template: `<div data-bind="text: label"></div>`
});
const categories = ko.observableArray(["", "", ""]);
const addCat = () => categories.push("");
ko.applyBindings({ categories, addCat });
function fadeIn(el) {
el.classList.add("seeThrough");
setTimeout(
() => el.classList.add("fadeIn"),
200
);
}
.seeThrough {
opacity: 0;
transition: opacity .25s ease-in-out;
}
.fadeIn {
opacity: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<ul data-bind="foreach: categories">
<li data-bind="component: { name: 'category' }"></li>
</ul>
<button data-bind="click: addCat">add</button>
关于使用组件和 webpack,您可能需要查看 我几天前写的。它描述了如何配置 webpack 以使用 knockout 组件。
我正在尝试在 knockout 中创建新组件:
ko.components.register("categories", {
viewModel: {
instance: MY_VIEW_MODEL
},
template: require('html-loader?interpolate!./components/categories.html')
});
和我的 HTML 块在 categories.html:
内<div class="panel" data-bind="foreach: categories, afterRender: ${require('../effects.js').fadePanels()}"></div>
和effect.js内部:
function fadePanels() {
$('.panel').velocity('fadeInPanels', {
stagger: 250,
})
}
加webpack.config.js:
test: /\.html$/,
loader: 'html-loader',
options: {
interpolate: true
},
exclude: /node_modules/
但它根本不起作用。这是浏览器的输出(控制台中没有错误):
你有这方面的经验吗?你知道如何正确处理吗?
您可以 运行 使用 createViewmodel
工厂方法获取组件元素的函数。此函数接收一个包含当前 element
的信息对象。
ko.components.register("category", {
viewModel: {
createViewModel: (params, info) => {
fadeIn(info.element);
return { label: "hello world" }
}
},
template: `<div data-bind="text: label"></div>`
});
const categories = ko.observableArray(["", "", ""]);
const addCat = () => categories.push("");
ko.applyBindings({ categories, addCat });
function fadeIn(el) {
el.classList.add("seeThrough");
setTimeout(
() => el.classList.add("fadeIn"),
200
);
}
.seeThrough {
opacity: 0;
transition: opacity .25s ease-in-out;
}
.fadeIn {
opacity: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<ul data-bind="foreach: categories">
<li data-bind="component: { name: 'category' }"></li>
</ul>
<button data-bind="click: addCat">add</button>
关于使用组件和 webpack,您可能需要查看