回答編集履歴

1

awesomeThings の問題に対して回答。

2016/08/07 09:37

投稿

flied_onion
flied_onion

スコア2604

test CHANGED
@@ -1,3 +1,95 @@
1
1
  isMyTweet, isMyStartのAuthを、`this.Auth`にした場合どうなりますか?
2
2
 
3
3
  addThingやdeleteThingの `this.$http`が動作しているならそれで動きそうな気がします。
4
+
5
+
6
+
7
+ ---
8
+
9
+
10
+
11
+ # 追記
12
+
13
+ (8/7 18:12)
14
+
15
+
16
+
17
+ 個人的に興味もあったのでやってみました。
18
+
19
+ ```
20
+
21
+ ReferenceError: Auth is not defined
22
+
23
+ ```
24
+
25
+
26
+
27
+ の問題は最初に書いた回答の通り、main.component.jsのisMyXX の方でAuthにthisを付けてください。
28
+
29
+ (コンストラクタは質問者さんのコードのままで)
30
+
31
+
32
+
33
+ ```
34
+
35
+ isMyStar(thing){
36
+
37
+ this.Auth.isLoggedIn() && thing.stars && thing.stars.indexOf(this.Auth.getCurrentUser()._id)!==-1;
38
+
39
+ }
40
+
41
+
42
+
43
+ isMyTweet(thing){
44
+
45
+ this.Auth.isLoggedIn() && thing.user && thing.user._id===this.Auth.getCurrentUser()._id;
46
+
47
+ }
48
+
49
+ ```
50
+
51
+
52
+
53
+
54
+
55
+ ただ私の環境だと、Auth.isLoggedInとかAuth.getCurrentUserとかは、asyncの方が呼ばれてしまっていてエラーはなくなりますけど、うまくは動作してないです。
56
+
57
+ そこら辺悩んでて回答が遅れたんですが、とりあえず質問の中にあったもう一つの問題、
58
+
59
+ starThing、unstarThingでの awesomeThings が見つからない点に回答します。
60
+
61
+
62
+
63
+ awesomeThingsを参照しているところがpromiseのsuccess関数内なので、そこでのthisはコントローラではありません。
64
+
65
+ jsのクロージャ問題でのよくある解決策と同じですが、変数に代入しておきます。
66
+
67
+ ```js
68
+
69
+ starThing(thing) {
70
+
71
+ var that = this;
72
+
73
+ this.$http.put('/api/things/' + thing._id + '/star').success(function(newthing){
74
+
75
+ // thatを使う。
76
+
77
+ that.awesomeThings[that.awesomeThings.indexOf(thing)] = newthing;
78
+
79
+ });
80
+
81
+ }
82
+
83
+ ```
84
+
85
+
86
+
87
+ 前述の通り私の環境ではサーバー処理は呼ばれてますけど、クリックしても星の見た目は変わりません。
88
+
89
+ (既に、自分の投稿に×が見えている状態なら星の動作もうまくいくと思います。)
90
+
91
+ 更新されてるかどうかは、デバッグでstarsみるとかdb見るとかすればできると思います。
92
+
93
+
94
+
95
+