【发布时间】:2014-01-25 13:07:33
【问题描述】:
所以我对此进行了测试,发现当我以这种方式设置代码时,订阅函数永远不会被调用:
app.index.js
requirejs.config({
"baseUrl": "/Scripts/app/item/",
"paths": {
"jquery": "//code.jquery.com/jquery-2.0.3.min",
"toastr": "/Scripts/lib/toastr",
"moment": "/Scripts/lib/moment",
"fu": "/Scripts/lib/jquery.fineuploader-3.8.0",
"ko": "//cdnjs.cloudflare.com/ajax/libs/knockout/3.0.0/knockout-min",
"knockout.validation": "/Scripts/lib/knockout.validation",
"mapping": "/Scripts/lib/knockout.mapping-latest.debug",
"timeentry": "/Scripts/lib/jquery.timeentry.min",
"model.obj": "../models/model.obj",
"timecollection.kobindings":"/Scripts/lib/koBindings/timecollection.kobindings"
},
shim: {
"knockout.validation": ["ko"],
"mapping": ["ko"]
}
});
require(["ko"], function (ko) {
//manually set the global ko property
window.ko = ko;
//then bring in knockout validation
require(["knockout.validation"], function () {
ko.validation.configure({
insertMessages: false,
decorateElement: true,
errorElementClass: 'error'
});
require(["main.index"], function (bs) {
bs.run();
});
});
});
main.index.js
define(['jquery',
'ko',
'mapping',
'indexViewModel',
'model.obj'],
function ($, ko, mapping, indexViewModel, obj) {
var
run = function () {
var vm = new indexViewModel();
var array = [];
$.getJSON("/api/GetData/", function (data) {
mapping.fromJS(val.ObjCollection, {
create: function (options) {
return new Obj(options.data);
}
}, vm.ObjCollection);
}).done(function(){
ko.applyBindings(vm, document.getElementById('#view'));
});
};
return {
run: run
};
});
模型.js
define('model.obj', ['ko', 'moment'], function (ko, moment) {
var Obj= function (data) {
var self = this;
self.Id = data.Id;
self.Property = ko.observable(data.Property);
self.Property .subscribe(function () {
console.log('in here');
}, self);
};
return Obj;
});
如果我删除此代码:
require(["ko"], function (ko) {
//manually set the global ko property
window.ko = ko;
//then bring in knockout validation
require(["knockout.validation"], function () {
ko.validation.configure({
insertMessages: false,
decorateElement: true,
errorElementClass: 'error'
});
require(["main.index"], function (bs) {
bs.run();
});
});
});
然后就这样吧:
require(["main.index"], function (bs) {
bs.run();
});
订阅函数会显示console.log,但使用代码,订阅永远不会被调用。
【问题讨论】:
标签: knockout.js requirejs knockout-mapping-plugin knockout-validation