preProcessTimelineStatus?でstatus.textが書き換え可能である件について †
- ページ: 目安箱
- 投稿者: mutaguchi?
- 優先順位: 低
- 状態: 完了
- カテゴリー: AzureaScript?
- 投稿日: 2011-04-16 (土) 06:25:35
- バージョン:
メッセージ †
API Lv16の段階では、preProcessTimelineStatus?イベントハンドラ内でstatus.textを書き換え可能です。
しかし目安箱22の議論では、表示上のテキストはitem.textで書き換えることで実現し、status.textの中身は変更しないようにすれば利便性が高まる、という結論になりました。
この考え方を適用するならば、preProcessTimelineStatus?イベントハンドラでも同様の実装になると整合性が取れると思うのですがいかがでしょうか?
実際、preProcessTimelineStatus?で書き換えたstatusの元のテキストを後で取得したいというシチュエーションに遭遇してちょっと困っています。
ただし、その場合はTwitterService?.preProcessTimelineStatus?ではなく、たとえばview.preProcessItem?(function(item){})に置き換える必要が出てきて、他のイベントハンドラと整合性が取れなくなります。
あるいは単純にstatus.textをリードオンリーにして、preProcessTimelineStatus?でテキストを書き換える場合はSystem.views.currentView.getItemByStatusId?(status.id).textを書き換えるようにしましょう、でもいいかもしれません(直感的ではないですが)。
しかし現状ではこのコードはうまく動きません。preProcessTimelineStatus?イベントはitemオブジェクトが生成される前に発生するためだと思います。
(ついでですがgetItemByStatusId?なども、引数が存在しないidの場合はundefinedを返してほしいです)
というわけで、うまい落としどころが思いつきませんでしたが、もし何か妙案ございましたらご検討くださいませ。このままで問題なしとの判断ならば却下願いますです。
個人的にはview.preProcessItem?系のイベントハンドラに移行(というか追加?)がベターかなとは思います。
これによりビューごとに処理を分けることも可能になりますので。
- preProcessTimelineStatus?でstatus.text を書き換えると内部構造体に保存されるテキストを書き換えられるので短縮URLを展開してプレビューエンジンに正しく渡すことができるとかいうこともできますが、悩みますね -- tmyt?
- プレビューエンジンはstatus.textに含まれるURLを元にキックされるのですね。item.textからひっぱってくるようにすればいいような気もしましたが、いろんなところに変更の影響が及びそうですね。難しいですね。preProcessTimelineStatus?のあとにview.preProcessItem?も発生するようにして、短縮URL展開など永続的に変更してもあまり問題にならない処理は前者、翻訳とか大幅に元のテキストを変更する処理は後者でやるように推奨するというのはどうでしょうか。しかしイベントを増やすと処理速度が心配になりますかね。 -- mutaguchi?
- まあこれもオリジナルのテキストを後で使うなら、スクリプトで変更前の値を保持しておきましょう、でもいいかもですね。 -- mutaguchi?
- とりあえずview.postProcessItem?を追加してみました。Itemオブジェクトがハンドラに飛んでくるので適当にいじるといいかもしれません。どうでしょうか -- tmyt?
- ありがとうございました。次のリリースで試してみますね。 -- mutaguchi?
- とりあえず完了にしておきました。postProcessItem?の動作に問題があればまた提案に差し戻してください -- tmyt?
- postProcessItem?内でitem.statusの値がちゃんと取れないんですがこれはどうにもならないですかね?追加されたitemに入ってるstatusのユーザー名を見て処理を分けたいです。 -- mutaguchi?
- postProcessItem?呼ぶところ、(おかしくはないですが)おかしかったので直しておきました -- tmyt?
- うーん、どっちなんだろう^^;でもありがとうです! -- mutaguchi?
- beta18で今度はpostProcessItem?の引数のitemがundefinedになってる気がします。 -- mutaguchi?
- view objectのイベントでthisをView objectに設定するようにしたときにエンバグしたみたい・・・ なおしておきました -- tmyt?
- おつでーす -- mutaguchi?