So I test this out and found out that the subscribe function never gets called when I set up my code this way:
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
};
});
Model.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;
});
if i remove this code:
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();
});
});
});
and just leave it like this:
require(["main.index"], function (bs) {
bs.run();
});
The subscription function does display console.log, but with the code, the subscription never gets called.