【发布时间】:2016-03-04 07:44:14
【问题描述】:
我正在使用 Knockout-Validation 插件创建一个 Knockout Web 应用程序。我想使用 WebPack 进行捆绑。
问题是当我使用 WebPack 时,Knockout-Validation 会中断。
作为一个简单的测试用例,我无需捆绑即可使验证正常工作:https://jsfiddle.net/3y24zvLs/
HTML:
<label>Name</label>
<input type="text" data-bind="value: name">
<pre data-bind="text: ko.toJSON($data, null, 2)"></pre>
JS:
function ViewModel() {
var self = this;
self.name = ko.observable().extend({required: true});
};
ko.applyBindings(new ViewModel());
我也可以将它用作已注册的 Knockout 组件:http://jsfiddle.net/3y24zvLs/2/
HTML:
<name-component></name-component>
JS:
function ViewModel() {
var self = this;
self.name = ko.observable().extend({required: true});
};
ko.components.register('name-component', {
viewModel: ViewModel,
template: '<label>Name</label>\
<input type="text" data-bind="value: name">\
<pre data-bind="text: ko.toJSON($data, null, 2)"></pre>'
});
ko.applyBindings();
但是,当我尝试使用捆绑验证中断时:
index.html:
<!DOCTYPE html>
<head>
<script src="Built/main.bundle.js"></script>
</head>
<body>
<name-component></name-component>
</body>
main.js
var ko = require('../node_modules/knockout/build/output/knockout-latest');
var $ = require('jquery');
require('./ViewModel');
$(function(){
ko.applyBindings();
})
ViewModel.js
"use strict";
var ko = require('../node_modules/knockout/build/output/knockout-latest');
var kv = require('../node_modules/knockout.validation/dist/knockout.validation');
function ViewModel() {
var self = this;
self.name = ko.observable().extend({required: true});
};
ko.components.register('name-component', {
viewModel: ViewModel,
template: '<label>Name</label>\
<input type="text" data-bind="value: name">\
<pre data-bind="text: ko.toJSON($data, null, 2)"></pre>'
});
webpack.config.js
var webpack = require('webpack'),
path = require('path');
module.exports = {
context: path.join(__dirname, 'App'),
entry: './main.js',
output: {
path: path.join(__dirname, 'Built'),
filename: '[name].bundle.js'
},
module: {
loaders: [
{ test: /\.html$/, loader: 'html-loader'},
{ test: /\.js$/, loader: 'babel-loader'}
]
}
};
有没有人知道验证失败的原因?淘汰赛验证与 WebPack 不兼容吗?也许我应该尝试改用 Gulp 或 Grunt 来捆绑组件并使用 RequireJS 而不是 WebPack/CommonJS?虽然我不完全确定这个开关会有多简单......
非常感谢任何帮助。
【问题讨论】:
标签: javascript knockout.js webpack knockout-validation