在Durandal中附加视图时如何调用函数?

时间:2013-10-28 17:54:13

标签: requirejs durandal durandal-2.0

我刚刚开始用Durandal开发一个网络应用程序。我不明白如何从一个viewmodel调用一个函数,为什么如果我找到我的文档的一个元素,它似乎还没有附加。

示例:viewmodel.js

    define( ['libone', 'libtwo'], function () {


      $('.carousel').libone({
          expandbuttons: true,
          keyboard: true,
          mouse: true
      });

    });

它没有找到ID调用轮播是为什么没有view.hmtl内容而是index.html内容。

有什么想法吗? 提前致谢

UPDATE 没有错误,但不返回视图内容。 view.html

<section> 
  <h2 data-bind="html:name"></h2> 
  <blockquote data-bind="html:descr"></blockquote> 
    <div class="carousel"> 
      <div class="carousel-sections"> 
        <div class="carousel-section"> ... some content ... </div> 
      </div> 
    </div> 
  <a id="carousel-scroll-prev" href="#"></a> 
  <a id="carousel-scroll-next" href="#"></a> 
<section> 

modelview.js

define( ['libone', 'libtwo'], function (libone, libtwo) {
  var viewattached = function(view){
    var view = $(view);
    view.find('.carousel').libone({
      expandbuttons: true,
      keyboard: true,
      mouse: true
    });
  };

  var vm = {
    attached: viewattached,
    name: 'How about we start?',
    descr: 'You have many choices to make and many roads to cross...'
  };

  return vm;
});

仅显示名称,描述和滚动,但不显示轮播部分。

3 个答案:

答案 0 :(得分:0)

要像使用请求一样使用jquery访问控件,您应该使用视图附加事件 e.g。

define( ['libone', 'libtwo'], function (libone, libtwo) {
    var viewattached = function(view){
      var view = $(view);
      view.find('.carousel').libone({
          expandbuttons: true,
          keyboard: true,
          mouse: true
      });
    };

    var vm = {
        attached: viewattached
    };

    return vm;
});

可能有效的另一个是compsitionComplete ..

答案 1 :(得分:0)

使用 compositionComplete 而非 附加 解决了渲染问题。

答案 2 :(得分:0)

compositionComplete工作正常。但是如果刷新页面,合成完成会跳过元素与轮播的绑定,而轮播不起作用。 任何