0

After upgrading to durandal 2.0, I found I needed to convert my master list page to use the showDialog function instead of showModal.

Previously my master model looked like this:

define(['durandal/amd/require', 'durandal/app', 'durandal/viewLocator',     'durandal/system', 'durandal/plugins/router', 'durandal/lib/tableModel', 'viewmodels/product'], function (require, app, viewLocator, system, router, table, product)     {
var tm = {
    tableModel: new tableModel(),
    createProduct: function (data) {
        app.showModal(product, data);
    }
}
//...
return tm;
}

Then in my product detail view page I could close the modal easily like so

data-bind="click: $root.modal.close">Close

Now in Durandal 2.0 it is much harder to get right.

The code in the masterpage is now

define(['durandal/app', 'durandal/viewLocator', 'durandal/system', 'plugins/router', 'lib/xhrs', 'lib/tableModel'], function (app, viewLocator, system, router, xhrs, table, product) {
var tm = {
tableModel: new tableModel(),
createProduct: function (data) {
    app.showDialog(product, data);
}
}
//...    
return tm;    }

But the way to access the close function is annoying:

Firstly I have to require the 'plugins/dialog' into the product detail viewmodel; which I would prefer not to do as I don't think the detail viewmodel needs to know that it is a dialog, only the master list viewmodel needs to know that.

then in the compositionComplete event of the product detail view model I assign:

prodedit.close = function () {
   dialog.close(prodedit);
}

(prodedit is the returned as the product detail vm)

In this way the product detail dialog can be closed using this:

data-bind="click: $root.close"

OK NOW HERE IS MY ISSUE:

This will work to popup the dialog once or twice, but then fails from then onward without an error. The only thing I can see is that dialogActivator.activateItem hits its fail line: dfd.resolve(false);

Interestingly if I do pause long enough on breakpoints the issue does not occur. But once it occurs once, it never works again to open the dialog.

Is there a better way to do this?

Thankyou.

Jayantha Lal Sirisena
  • 21,216
  • 11
  • 71
  • 92
JoeWarwick
  • 105
  • 2
  • 8
  • Ahhh I found the bug. Was caused by knockout 3 beta. removeAll on an empty array was a bug in that version but fixed on the recent released release candidate. – JoeWarwick Oct 16 '13 at 03:27
  • It's better if you could post your finding as an answer for this , so that others will get more benefit. – Jayantha Lal Sirisena Oct 16 '13 at 05:58

0 Answers0