вградете сребърна светлина в дюрандал

Имам компонент silverlight excel, който трябва да вградя в моето приложение durandal.

Моят HTML изглежда така:

   <form id="silverlightControl" runat="server" data-bind="if: silverlightIsInstalled() && silverlightData()!=null">
        <div id="silverlightControlHost">
            <object id="silverlightObject" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%">
                <param name="source" value="ClientBin/SilverlightGrid.xap" />
                <param name="onError" value="onSilverlightError" />
                <param name="onLoad" value="onSilverlightLoad" />
                <param name="background" value="white" />
                <param name="minRuntimeVersion" value="5.0.61118.0" />
                <param name="autoUpgrade" value="false" />
            </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>
        </div>
    </form>

Проблемът е, че това се опитва да извика глобални функции, наречени onSilverlightLoad и onSilverlightError.

Има ли начин от моя модул да дефинирам и презапиша тези глобални функции?


person pilavdzice    schedule 21.03.2014    source източник
comment
Да ги замените със свои?   -  person SQLMason    schedule 21.03.2014
comment
това не е дубликат. Вижте кода по-горе вече има параметъра ‹param name=onLoad value=onSilverlightLoad /›, но другият въпрос не се отнася до това как да се дефинира тази функция в модули AMD require.js за рамки на едностранични приложения като durandal, където няма глобални променливи   -  person pilavdzice    schedule 22.03.2014
comment
Да, трябва да дефинирам и заменя със собствен. С кода по-горе Silverlight извиква функцията onSilverlightLoad, всеки AMD durandal модул, който имам, трябва да презапише това, така че функциите, свързани с текущата страница, да бъдат изпълнени.   -  person pilavdzice    schedule 22.03.2014
comment
И така... Искате ли да стартирате код от страна на сървъра от функция на JavaScript? Моля, определете какъв е вашият модул. Разбирам защо просто не промените параметъра на вашата собствена JavaScript функция и не стартирате с нея.   -  person SQLMason    schedule 22.03.2014
comment
Не. Нищо във въпроса ми няма нищо общо със сървърната страна. Контекстът на моя въпрос е Durandal (вижте заглавието). Говоря за модул require.js AMD.   -  person pilavdzice    schedule 24.03.2014
comment
Съжалявам, съдейки по приетия отговор, не разбрах трудността или какво беше погрешно разбрано за правенето на това, което той направи. Изглеждаше ми основно, така че си помислих, че пропускам нещо.   -  person SQLMason    schedule 24.03.2014
comment
Къде обикновено поставяте код, който трябва да работи в глобален обхват в Durandal? Използвах стартирания комплект, след което редактирах маркера на скрипта в Durandal/Index.cshtml, има ли по-добър начин?   -  person pilavdzice    schedule 24.03.2014


Отговори (2)


Има ли начин от моя модул да дефинирам и презапиша тези глобални функции?

да, можеш да направиш нещо подобно...

в глобален обхват:

var currentModule = null;

function onSilverlightLoad(sender, args) {
   if (currentModule && currentModule.onSilverlightLoad) {
       // forward the event to the current module
       currentModule.onSilverlightLoad(sender, args);
       return;
   }
   // fallback logic...
}

function onSilverlightError(sender, args) {
   if (currentModule && currentModule.onSilverlightError) {
       // forward the event to the current module...
       currentModule.onSilverlightError(sender, args);
       return;
   }
   // fallback logic...
}

във вашия модул:

window.currentModule = this;
// todo: define public function properties named onSilverlightLoad and onSilverlightError
person Jeremy Danyow    schedule 24.03.2014

Съвет за всеки друг, който вгражда silverlight в приложение на Durandal.

Трябва да направите това или когато напуснете тази страница и се върнете към нея, ще се случат лоши неща:

vm.binding = функция () { return { cacheViews: false }; };

person pilavdzice    schedule 24.03.2014