Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
242 views
in Technique[技术] by (71.8m points)

knockout.js - activationData not getting passed in durandal

I am using durandal version 1.1. From compose binding I am passing some extra parameters through activationData. But the child viewmodel does not get the value. It is always received as undefined in the activate method.

<div data-bind="compose: {
                        model: 'testmodel',
                        activationData: {data : 10},
                            activate: true

                        }">

</div>

The activate method looks like:

define(['durandal/app', 'durandal/system', 'durandal/plugins/router', 'services/logger', 'services/datacontext', 'config'], function (app, system, router, logger, Datacontext, config) {

var testmodel= function () {

    var vm = this;

    vm.activate = function (activationData) {
        alert(activationData);
        logger.log('View Activated',
               null, 'test', true);
    };
 };
 return testmodel;

});

Also added activate to prototype but that does not work as well:

 define(['durandal/app', 'durandal/system', 'durandal/plugins/router', 'services/logger', 'services/datacontext', 'config'], function (app, system, router, logger, Datacontext, config) {

var testmodel= function () {

    var vm = this;
};
testmodel.prototype.activate = function (activationData) {
        alert(activationData);
        logger.log('View Activated',
               null, 'test', true);
};

 return testmodel;

});
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I solved the problem. I am using durandal 1.1 version. There is a tryActivate function in composition.js file which makes a function call as shown below:

function tryActivate(settings, successCallback) {
    if (shouldPerformActivation(settings)) {
        viewModel.activator().activateItem(settings.model).then(function (success) {
            if (success) {
                successCallback();
            }
        });
    } else {
        successCallback();
    }
}

Only viewmodel parameter was passed to activateItem as seen above. I also passed the activationData parameter from there as below:

viewModel.activator().activateItem(settings.model,settings.activationData).then(function (success) {
            if (success) {
                successCallback();
            }
        });

Now, the activate method in testmodel as seen in the question gets the value 10 in activationData parameter.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...