2016-05-22 17 views
1

私はクラックキットを介していくつかのノックアウトによってバックアップされたWebページを持っており、うまくいきます。私は無限のスクロールを追加することによって私が持っているものを強化したいと思います。私がまだ理解していないことは、おそらくJavaスクリプトモジュール間で通信するためのプログラムを構築することです。これは、サンプルコードで最もよく説明されていますjavascriptモジュール間の通信方法

window.addEventListener('cloudkitloaded', function() { 
    // . 
    // . 
    // . 
    ko.applyBindings(new TrafficCamNZViewModel());      
}); 

この

window.addEventListener('scroll', function(event) 
{ 
    var element = event.target; 

    if (element.activeElement.scrollTop + element.body.clientHeight > document.height - 100) 
    { 
     console.log('We\'re near rock bottom'); 
    } 
}); 

だからこれは私がWebページのスクロールを検出することを可能にすると下を打ちます。 クラウドキットモジュールに何かをする必要があることを教えてください。

+0

これらはすべて同じJSファイルにありますか?あなたはどんな種類のモジュールローダーを使っていますか? –

+0

はい。すべて同じJSファイル内にあります。あなたが見ているのは、クラウドキットモジュール内のものとは別に、それです。 –

答えて

1

私はあなたの質問にタグを付けたように扱います(knockoutjsではクラウドキットではありません)。これのノックアウト部分は比較的簡単です。

通常、あなたはそれのための結合ハンドラを使用してもあなたは、確かにこの特定のケースでは、仕事を(だけでスクロールするためのイベントリスナーを追加すること)しているオプション:

function ViewModel() { 
 
    var self = this; 
 
    
 
    self.onScroll = function(data, evt) { 
 
    // here you have access to the relevant view model, as 
 
    // well as the original event, and you can inform cloud 
 
    // kit that it should further scroll 
 
    console.log("Scrolling..."); 
 
    }; 
 
    
 
    self.items = ko.observableArray([]); 
 
} 
 

 
var vm = new ViewModel(); 
 

 
for (var i=0; i<25; i++) { vm.items.push(i); } // dummy data 
 

 
ko.applyBindings(vm);
div { height: 100px; background: snow; overflow-y: scroll; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script> 
 

 
<div data-bind="event: { scroll: onScroll }"> 
 
<ul data-bind="foreach: items"> 
 
    <li data-bind="text: $data"></li> 
 
</ul> 
 
</div>

(スタックスニペットにはevtを使用するとサンドボックス/セキュリティの問題があるように見えるので、デモ全体を完了することはできません;リーダーの練習として残ります)

DOMの対話ビットが重くなったり、その場所で再利用したい場合は、ビューモデルに配置する代わりにa custom bindingを作成することをお勧めします。

クラウドキットが行くまでは...わかりませんが、私はそのライブラリに精通していません。現在の質問を少し書き換えてKnockoutJSの部分についてのみ書き直したり、クラウドキットについてもう1つ質問したりすることができます。または、あなたの現在の質問を書き換えて(最も重要なことは:再タグ付けして)、Cloudkitの部分について質問してください(あなたが試した/このオプションを選択すると、回答を削除するかどうかを決めることができます)。

+0

ありがとうございます。私はそれが働いている(今は...後でもっと仕事が必要)。あなたは正しいです、クラウドキットは私のデータ配信の仕組みです。ここの本当のジュースはノックアウトです。スクロールが配列の最下部付近にあることが検出されたら、より多くのデータを取得するために、クラウド・キットへのメッセージを出します。私はオーバーフローy:スクロールを動かすことができるかどうかを知るかもしれない。ページには、このフォームのようなdivではなく、ユーザーエクスペリエンスが矛盾しています...これは素晴らしいです - 私は上に行くことができます!どうもありがとうございます。 –

+0

divの "強制"オーバーフローCSSは、スタックスニペットで単にデモするだけでした。なぜなら、あなたは 'body 'に' data-bind'を簡単に置くことができないからです。私の投稿を聞いてうれしかった。 – Jeroen

+0

確かにあります。私はそれを実装しました。スクロールの下部を正しく検出し、データフェッチのために次に行うことを計画しました。 Jeroenありがとうございます。どのような素晴らしいコミュニティ! –

関連する問題