使用computeds。これは、ストリームのプロパティがあり、あなたのモデルに追加されます。
self.stream = ko.observable();
self.streamWatch = ko.computed(function() {
var video = document.getElementById("displayedDeviceSessionVideo");
if (self.stream() != null) {
// Start Stream
video.srcObject = self.stream();
} else {
// Stop
}
}, self);
私はあなたが何をしているかと考えていることは正しいが、複雑になりますインラインhtmlを行ったので、jsモデル自体のノックアウトの力を使用します。ブラウザは、指定されたオーディオ/ビデオを探し始めたときに
ビデオはもともとレンダリングされていない場合は、なぜ<video onloadstart="loadStream()">
function loadStream() {
var video = document.getElementById("displayedDeviceSessionVideo");
if (viewModel.stream() != null) {
// Start Stream
video.srcObject = viewModel.stream();
} else {
// Stop
}
}
を使用していないloadstartイベントが発生します。これは、ロード処理が開始されるときです。
リファクタリングコードですので、変更された場合でも計算されたストリームが更新されます。
はこれをテストしていませんが、理論的にはこれも動作し、したがって、すべてのノックアウトする必要があります
<video data-bind="event: { onloadstart: loadStream }">
モデル:
self.stream = ko.observable();
self.loadStream = function() {
var video = document.getElementById("displayedDeviceSessionVideo");
if (self.stream() != null) {
// Start Stream
video.srcObject = self.stream();
} else {
// Stop
}
}
self.streamWatch = ko.computed(function() {
var stream = self.stream();
self.loadStream();
}, self);
このアプローチについての私の心配だけの事はあるvideo要素の場合ストリームの更新時には表示されません。私は、これを避けるために要素にバインドする何らかの方法があることを願っています...ここに必要なカスタムバインディングはありますか? – SB2055
おかしい、これを書いて、私は最後に余分なビットを持っていた、これはそこに存在する要素に依存していると言いました。余分なロジックを置くことができます。 stream.valueHasMutated()。しかし、ビデオ要素またはラップされたノックアウト 'ifs'を動的に追加する場合にのみ必要です。 –
ええええええええええええええええええええええええええええええええええええええええええええばらん - ええ、 'hasMutated'を私の観察可能なものすべてと結びつけ、それを私のテンプレートロジックに取り入れることは解決策ですが、(維持管理、可読性、優雅さなど)私は興奮していません。 – SB2055