0

私はjavascript、特にdojoに不慣れで、行き詰まりました。非常に単純なタスクを想定していますが、それを解決することはできません。

基本的に私がやろうとしていることは次のとおりです。

リストアイテムをクリックすると、別のビューに移動する必要があります。私はこれを次のように行っています:

<li data-dojo-type="dojox.mobile.ListItem"
            data-dojo-props="moveTo:'#'" onClick="transitionTo('#recommend',1);">Recommend App</li>

これで、id=recommend`のdivに2つのlistitemがあります。

<div id="recommend" data-dojo-type="dojox.mobile.ScrollableView">
        <div class="belowTab" style="width: 100%;">&nbsp;</div>
            <ul data-dojo-type="dojox.mobile.RoundRectList">
                <li data-dojo-type="dojox.mobile.ListItem">via Email</li>
                <li data-dojo-type="dojox.mobile.ListItem"
                    data-dojo-props="moveTo:'#'" onClick="postToWall();">via Facebook</li>
</div>
            </ul>

特定の関数がtrueを返す場合は両方のリストアイテムを表示し、そうでない場合は2番目のリストアイテムを非表示にして1番目だけを表示したいと思います。ifステートメントをdivと統合するというこのアイデアのロジックとアプローチ方法を知りたい

4

1 に答える 1

0

ここでデモンストレーションするマークアップとしてイベント フックを作成する方法は、あまり文書化されていません。ただし、コードベースで関数を作成し、それを dojoProps 属性として設定する方がよいでしょう (例: function myonclick() { ... }and <div data-dojo-type="dijit._Widget" data-dojo-props="onClick: myonclick"></div>.

Viewこれを実現するには、ウィジェットが提供するイベントを把握する必要があります。これを行う最も簡単な方法は、単にdojotoolkit-src/dojox/mobile/View.jsファイルを開くことonStartView || onBeforeTransitionInです。

マークアップを介して、onBefore.. に dojo/メソッドを作成し、リスト内の子を操作できるようにします。ところで、あなたは迷子の終了</div>タグを持っています。

<div id="recommend" data-dojo-type="dojox.mobile.ScrollableView">
    <div class="belowTab" style="width: 100%;">&nbsp;</div>
    <ul data-dojo-type="dojox.mobile.RoundRectList">
        <li data-dojo-type="dojox.mobile.ListItem">via Email</li>
        <li data-dojo-type="dojox.mobile.ListItem"
              data-dojo-props="moveTo:'#'" onClick="postToWall();">via Facebook</li>
    </ul>

    <script type="dojo/method" event="onBeforeTransitionIn" args="moveTo, dir, transition, context, method">
          // onBeforeTransitionIn(moveTo, dir, transition, context, method):
          var listWidget = dijit.byNode(dojo.query("#recommended ul")[0]);
          // say you have a function with true/false return, if item should show
          dojo.forEach(listWidget.getChildren(), function(Item, idx) {
              dojo.style(Item.domNode, {
                   display: showItem(Item) ? '' : 'none'
              });
          });
    </script>
</div>
于 2012-08-25T22:36:03.763 に答える