Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ObservableArrayとネイティブ配列(Array)の相互運用性の向上 #155

Closed
simdy opened this issue Jan 25, 2013 · 1 comment
Closed
Assignees
Milestone

Comments

@simdy
Copy link
Member

@simdy simdy commented Jan 25, 2013

例えばネイティブ配列のconcat()の引数としてObservableArrayを渡すと、
配列の要素の結合が正しく行われない。

var native = [1, 2];
var obs = h5.core.data.createObservableArray().push('A', 'B');
var result = native.concat(obs); //[1, 2, 'A', 'B'] が正解だが、[1, 2, obs] になってしまう

このようなことができるだけ発生しないようにする。

@simdy
Copy link
Member Author

@simdy simdy commented Feb 14, 2013

ObservableArrayからネイティブ配列(の呼び出し時点のスナップショット)を取得するための
toArray()メソッドを追加する。

ObservableArrayを「完全に」ネイティブ配列相当としてブラウザに扱わせるのは困難なので、
ネイティブ配列を要求するメソッド(array.concat()等々)に渡すときは
toArray()を使用してネイティブ配列化してもらうようにする。

一方、ObservableArrayの配列相当メソッドのうち、戻り値として新規に配列を返すメソッド(concat等)については、
戻り値自身もObservableArrayになるようにする。
ObsArrayの引数はObsArrayをとれるようにする。

整理すると:
obs.concat(obs) -> obs
obs.concat(array) -> obs //obsはネイティブ配列を受け取れるようにしておく
array.concat(obs.toArray()) //ネイティブ配列と相互運用するときはtoArray()を使用

注:実装を改良することでarray.concat()等配列のメソッドの引数に渡したときに
配列として扱わせるようにすることは可能な模様だが、
いついかなる場合でもそれが可能なわけではない。
(ブラウザから見るとObsArrayはやはり「オブジェクト」であり、「配列」ではない。
例えばコンソール出力した場合の挙動もネイティブ配列とは微妙に異なる。)
そのため、状況により使い分けるのは長期的に見て混乱が予想されるので、
一律toArray()による対応をとってもらうこととする。

simdy pushed a commit to hifive-labs/hifivemain that referenced this issue Feb 14, 2013
simdy pushed a commit to hifive-labs/hifivemain that referenced this issue Mar 8, 2013
fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Mar 8, 2013
fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Mar 8, 2013
インスタンスが違うものを比較していた箇所があり、配列の比較方法を変えたことで失敗するようになっていたので直しました。
@simdy simdy closed this Mar 8, 2013
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
1 participant
You can’t perform that action at this time.