{"id":21509,"date":"2019-10-22T19:54:39","date_gmt":"2019-10-22T10:54:39","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=21509"},"modified":"2019-12-24T08:27:39","modified_gmt":"2019-12-23T23:27:39","slug":"databindingcomponent-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=21509","title":{"rendered":"DataBindingComponent \uc0ac\uc6a9\ud558\uae30"},"content":{"rendered":"<h1>DataBindingComponent\ub780?<\/h1>\n<p>DataBindingComponent\ub294 BindingAdapter\uc5d0 \ub300\ud55c getter\ub97c \ud3ec\ud568\ud558\ub294 \uc778\ud130\ud398\uc774\uc2a4\ub2e4.\u00a0 DataBindingComponent\ub97c \uad6c\ud604\ud558\ub294 \ud074\ub798\uc2a4\ub294 \ubc18\ub4dc\uc2dc \ud558\ub098\uc774\uc0c1\uc758 \uba54\uc11c\ub4dc\ub97c \uac00\uc838\uc57c\ud55c\ub2e4. \uba54\uc11c\ub4dc\uc758 \uc774\ub984\uc740 \uc811\ub450\uc5b4 get\uacfc @BindingAdapter \uba54\uc11c\ub4dc\ub97c \ud3ec\ud568\ud558\ub294 \ud074\ub798\uc2a4 \ub610\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc758 \uc774\ub984\uc758 \ud569\uc131\uc5b4\uc5ec\uc57c\ud55c\ub2e4.<\/p>\n<p>\uc608\ub97c\ub4e4\uc5b4 @BindingAdapter \uba54\uc11c\ub4dc\ub97c \uac00\uc9c0\uace0 \uc788\ub294 \ud074\ub798\uc2a4\uc758 \uc774\ub984\uc774 ClickBinding\uc774\ub77c\uba74 DataBindingComponent\uad6c\ud604\uccb4\uac00 \uac16\ub294 \uba54\uc11c\ub4dc\uc758 \uc774\ub984\uc740\u00a0 getClickBinding()\uc774 \ub41c\ub2e4.<\/p>\n<p>\ub2e4\uc74c \uc608\uc81c \ucf54\ub4dc\ub4e4\uc740 \ub370\uc774\ud130\ubc14\uc778\ub529 \ud074\ub798\uc2a4\ub97c \ucd08\uae30\ud654 \ud560 \ub54c \uc8fc\ub85c \uc0ac\uc6a9\ub418\ub294 \uba54\uc11c\ub4dc\uc774\ub2e4.\u00a0<\/p>\n<pre class=\"lang:java decode:true\">DataBindingUtil.setContentView(activity, layoutId, bindingComponent)\r\nDataBindingUtil.inflate(..., bindingComponent)\r\nDataBindingUtil.bind(view, bindingComponent)<\/pre>\n<p>\uba54\uc11c\ub4dc\uc758 \ub9c8\uc9c0\ub9c9 \ub9e4\uac1c\ubcc0\uc218\ub85c \ub370\uc774\ud130\ubc14\uc778\ub529 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uac00\uc9c8\uc218 \uc788\ub2e4.<\/p>\n<h2>\uc5b8\uc81c \uc4f0\uc77c\uae4c?<\/h2>\n<p>\ub370\uc774\ud130\ubc14\uc778\ub529 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c\ub294 \ubc14\uc778\ub529 \uc5b4\ub311\ud130\ub97c \ud1b5\ud574 \uc0ac\uc6a9\uc790 \uc815\uc758 \ub85c\uc9c1\uc744 \uc218\ud589\ud560 \uc218 \uc788\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc774 \uc4f0\uc778\ub2e4.<\/p>\n<pre class=\"lang:java decode:true \">@BindingAdapter(\"android:paddingLeft\")\r\npublic static void setPaddingLeft(View view, int padding) {\r\n  view.setPadding(padding,\r\n                  view.getPaddingTop(),\r\n                  view.getPaddingRight(),\r\n                  view.getPaddingBottom());\r\n}\r\n<\/pre>\n<p>\uc774\ub7ec\ud55c \ucf54\ub4dc\ub294 \uc544\ubb34\ubb38\uc81c \uc5c6\uc774 \uc798 \ub3d9\uc791\ud558\uc9c0\ub9cc, static \uba54\uc11c\ub4dc\ub77c\ub294 \ud2b9\uc9d5\uc744 \uac00\uc9c0\uace0 \uc788\ub2e4. \uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 \uc0c1\ud0dc\ub97c \uc800\uc7a5\ud558\uac70\ub098,\u00a0 close(), clear(), dispose() \uc640 \uac19\uc740 \uba54\uc18c\ub4dc\ub97c \ud638\ucd9c\ud558\uc5ec \ub9ac\uc18c\uc2a4 \uc815\ub9ac\ub97c \ud558\ub294\ub370 \uc5b4\ub824\uc6c0\uc774 \uc788\ub2e4.<\/p>\n<p>\ub370\uc774\ud130 \ubc14\uc778\ub529 \ucef4\ud3ec\ub10c\ud2b8(DataBindingComponent)\ub294 \uc774\ub7ec\ud55c \ubb38\uc81c\uc810\uc744 \ud574\uacb0\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc900\ub2e4.<\/p>\n<p>\uadf8 \uc678\uc5d0\ub3c4 static \uba54\uc11c\ub4dc\ub97c \uc81c\uac70\ud558\uace0 \ub3d9\uc801\uc73c\ub85c \ubc14\uc778\ub529 \uc5b4\ub311\ud130 \uba54\uc11c\ub4dc\ub97c \ubc14\uc778\ub529 \ud074\ub798\uc2a4\uc5d0 \ud3ec\ud568\uc2dc\ud0ac \uc218 \uc788\ub2e4.<\/p>\n<h2>\uc8fc\uc758 \uc0ac\ud56d<\/h2>\n<p>\ud558\ub098\uc758 \ubaa8\ub4c8\ub0b4\uc5d0\uc11c DatabindingComponent \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0c1\uc18d\ud558\uac70\ub098 \uad6c\ud604\ud55c \ubaa8\ub4e0 \uc778\ud130\ud398\uc774\uc2a4 \ubc0f \ud074\ub798\uc2a4\uac00 \uac00\uc9c0\uace0 \uc788\ub294 getter \uba54\uc11c\ub4dc\ub4e4\uc740 \ucef4\ud30c\uc77c\ud0c0\uc784\uc5d0 \ubcd1\ud569\ub418\uae30 \ub54c\ubb38\uc5d0 DatabindingComponent \uc0ac\uc6a9\uc2dc \uc774\ub97c \uc720\uc758\ud558\uc5ec \ubaa8\ub4e0 \uba54\uc11c\ub4dc\ub97c \uad6c\ud604\ud560 \uc218 \uc788\ub3c4\ub85d \ud574\uc57c\ud55c\ub2e4. \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 \ucef4\ud30c\uc77c\ud0c0\uc784\uc5d0 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud55c\ub2e4.<\/p>\n<h1>\uc911\ubcf5 \ud074\ub9ad \ubc29\uc9c0 \ubc14\uc778\ub529 \uc5b4\ub311\ud130 \ub9cc\ub4e4\uae30<\/h1>\n<p>\uc77c\uc815\uc2dc\uac04\ub0b4\uc5d0 \uc911\ubcf5\ud074\ub9ad \uc774\ubca4\ud2b8 \ubc1c\uc0dd\uc2dc \uccab\ubc88\uc9f8 \uc774\ubca4\ud2b8\ub9cc \ucc98\ub9ac\ud558\uace0 \ub098\uba38\uc9c0\ub294 \ubb34\uc2dc\ud558\ub294 \ubc14\uc778\ub529 \uc5b4\ub311\ud130\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uc790.<\/p>\n<p>\uc778\ud130\ud398\uc774\uc2a4 \ub610\ub294 \ud074\ub798\uc2a4\ub85c \ubc14\uc778\ub529 \uc5b4\ub311\ud130 \uba54\uc11c\ub4dc\ub97c \ud3ec\ud568\ud558\ub294 \ud30c\uc77c\uc744 \ub9cc\ub4e4\uc790. \ub2e4\uc74c\uc608\uc81c\ub294 ClickBinding \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \ud074\ub9ad \uc774\ubca4\ud2b8\ub97c \ub2e4\ub8f0 \ubc14\uc778\ub529 \uc5b4\ub311\ud130 \uba54\uc11c\ub4dc\ub97c \uc815\uc758\ud588\ub2e4.<\/p>\n<pre class=\"lang:java decode:true \">public interface ClickBinding {\r\n    @BindingAdapter(\"onClick\")\r\n    void setOnClickListener(View view, View.OnClickListener onClickListener);\r\n}<\/pre>\n<p>ClickBinding\uc758 \uad6c\ud604\uccb4\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">public class ClickBindingImpl implements ClickBinding, LifecycleObserver {\r\n\r\n    private final PublishSubject&lt;Pair&lt;View, View.OnClickListener&gt;&gt; publishSubject = PublishSubject.create();\r\n    private CompositeDisposable disposables = new CompositeDisposable();\r\n    private final int TIME_OUT = 1000;\r\n\r\n    public ClickBindingImpl(Lifecycle lifecycle) {\r\n        lifecycle.addObserver(this);\r\n    }\r\n\r\n    @Override\r\n    public void setOnClickListener(View view, View.OnClickListener onClickListener) {\r\n        view.setOnClickListener(v -&gt; publishSubject.onNext(Pair.create(view, onClickListener)));\r\n        disposables.add(publishSubject.throttleFirst(TIME_OUT, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())\r\n                .subscribe(pair -&gt; {\r\n                    if (pair != null &amp;&amp; pair.first != null &amp;&amp; pair.second != null) {\r\n                        pair.second.onClick(pair.first);\r\n                    }\r\n                })\r\n        );\r\n    }\r\n\r\n    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)\r\n    public void onDestroyed(){\r\n        if(disposables.isDisposed()){\r\n            disposables.dispose();\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>\uc911\ubcf5 \ud074\ub9ad \uc774\ubca4\ud2b8\ub97c \ubc29\uc9c0\ud558\uae30 \uc704\ud574 RxJava\uc758 throttleFirst\ub97c \uc0ac\uc6a9\ud55c\ub2e4. RxJava\ub294 subcribe()\ub97c \ud638\ucd9c\ub85c \ubc18\ud658\ub418\ub294 Disposable\uc744 \ubc18\ub4dc\uc2dc dispose()\ub97c \ud638\ucd9c\ud574\uc11c \ub9ac\uc18c\uc2a4\ub97c \ubc18\ud658\ud574\uc57c \ud55c\ub2e4. \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 \uba54\ubaa8\ub9ac \ub204\uc218\uac00 \ubc1c\uc0dd\ud55c\ub2e4. \uc561\ud2f0\ube44\ud2f0 \ub610\ub294 \ud504\ub808\uadf8\uba3c\ud2b8 \uac19\uc740 UI \ucee8\ud2b8\ub864\ub7ec\uac00 \ud30c\uad34\ub420 \ub54c dispose\ud558\ub3c4\ub85d \ud558\uae30 \uc704\ud574 LifecycleObserver\ub97c \uad6c\ud604\ud588\ub2e4.<\/p>\n<p>RxBinding\uc744 \uc0ac\uc6a9\ud55c\ub2e4\uba74 RxView.clicks(view).throttleFirst(&#8230;)\ub85c \ub300\uccb4\ud574\ub3c4 \uc88b\ub2e4.<\/p>\n<p>\uc774\uc81c DataBindingComponent\ub97c \uad6c\ud604\ud558\uc790<\/p>\n<pre class=\"lang:java decode:true \">public class ClickBindingComponent implements androidx.databinding.DataBindingComponent {\r\n\r\n    private final ClickBindingImpl clickBinding;\r\n    public ClickBindingComponent(Lifecycle lifecycle){\r\n        clickBinding = new ClickBindingImpl(lifecycle);\r\n    }\r\n\r\n    \/\/\uba54\uc18c\ub4dc\uc774\ub984 \ub9cc\ub4dc\ub294 \uaddc\uce59\uc5d0 \uc720\uc758 (\uc608: get + \ud074\ub798\uc2a4 \uc774\ub984)\r\n    public ClickBindingImpl getClickBinding() {\r\n        return clickBinding;\r\n    }\r\n}\r\n<\/pre>\n<p>\uc55e\uc5d0\uc11c \uc5b8\uae09\ud588\ub358 \uac83\uacfc \uac19\uc774 \uba54\uc11c\ub4dc \uc774\ub984 \ub9cc\ub4dc\ub294 \uaddc\uce59\uc774 \ub9e4\uc6b0 \uc5c4\uaca9\ud558\ubbc0\ub85c \uc720\uc758\ud558\uc790.<\/p>\n<p>\uc774\uc81c \uc561\ud2f0\ube44\ud2f0\uc5d0 \ubc84\ud2bc\uc744 \ud558\ub098 \ub9cc\ub4e4\uace0 \ubc14\uc778\ub529 \uc5b4\ub311\ud130\ub85c \ud074\ub9ad \uc774\ubca4\ud2b8\ub97c \ucc98\ub9ac\ud558\ub294 \uc608\uc81c\ub97c \uc0b4\ud3b4\ubcf4\uc790<\/p>\n<p><strong>MainActivity.java<\/strong><\/p>\n<pre class=\"lang:java decode:true \">public class MainActivity extends AppCompatActivity implements View.OnClickListener{\r\n\r\n    public static final String TAG = MainActivity.class.getSimpleName();\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        ActivityMainBinding binding = DataBindingUtil.setContentView(\r\n                this,\r\n                R.layout.activity_main,\r\n                new ClickBindingComponent(getLifecycle())\r\n        );\r\n\r\n        binding.setClickListener(this);\r\n\r\n    }\r\n\r\n    @Override\r\n    public void onClick(View v) {\r\n        Log.e(TAG, \"Clicked\");\r\n        Toast.makeText(this, \"Clicked\", Toast.LENGTH_SHORT).show();\r\n    }\r\n}\r\n<\/pre>\n<p><strong>activity_main.xml<\/strong><\/p>\n<pre class=\"lang:java decode:true \">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;layout&gt;\r\n    &lt;data&gt;\r\n        &lt;variable\r\n            name=\"clickListener\"\r\n            type=\"android.view.View.OnClickListener\" \/&gt;\r\n    &lt;\/data&gt;\r\n\r\n    &lt;androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n        xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\r\n        xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        tools:context=\".MainActivity\"&gt;\r\n\r\n        &lt;Button\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:text=\"click me\"\r\n            app:onClick=\"@{clickListener}\"\r\n            app:layout_constraintBottom_toBottomOf=\"parent\"\r\n            app:layout_constraintEnd_toEndOf=\"parent\"\r\n            app:layout_constraintStart_toStartOf=\"parent\"\r\n            app:layout_constraintTop_toTopOf=\"parent\" \/&gt;\r\n\r\n    &lt;\/androidx.constraintlayout.widget.ConstraintLayout&gt;\r\n&lt;\/layout&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.charlezz.com\/?attachment_id=21510\" rel=\"attachment wp-att-21510\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/10\/Screenshot_1571741444-576x1024.png\" alt=\"\" width=\"576\" height=\"1024\" class=\"aligncenter size-large wp-image-21510\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2019\/10\/Screenshot_1571741444-576x1024.png 576w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2019\/10\/Screenshot_1571741444-169x300.png 169w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2019\/10\/Screenshot_1571741444-768x1365.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2019\/10\/Screenshot_1571741444.png 1080w\" sizes=\"(max-width: 576px) 100vw, 576px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>\uc2e4\uc81c\ub85c \ud074\ub9ad\uc744 \ube60\ub974\uac8c \ubc18\ubcf5\ud574\ub3c4 \ud0c0\uc784\uc544\uc6c3\uc744 1000ms\ub85c \uc9c0\uc815\ud588\uae30 \ub54c\ubb38\uc5d0 1\ucd08\uc774\ub0b4\uc5d0 \uc911\ubcf5\ud074\ub9ad\ub418\ub294 \uc774\ubca4\ud2b8\ub294 \ubb34\uc2dc\ud558\uac8c \ub41c\ub2e4.<\/p>\n<p>\uc55e\uc758 \uc608\uc81c\ub294 <a href=\"https:\/\/github.com\/Charlezz\/DatabindingComponentSample\">https:\/\/github.com\/Charlezz\/DatabindingComponentSample <\/a>\uc5d0\uc11c \ud655\uc778 \ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>Dagger2\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \uac1c\ubc1c\uc790\ub294 DataBindingComponent\ub97c \ud655\uc7a5\ud558\uace0 \ud655\uc7a5\ud55c \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \ucef4\ud3ec\ub10c\ud2b8 \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ucd94\uac00\ud560 \uc218 \uc788\ub2e4. Dagger2\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\ub2e4\uba74, <a href=\"https:\/\/www.charlezz.com\/?p=43833\">Dagger2\uc640 \ud568\uaed8 DataBindingComponent\ub97c \uc0ac\uc6a9\ud558\ub294 \uc608\uc81c<\/a>\ub97c \ud655\uc778\ud558\uc790.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.charlezz.com\/?attachment_id=21511\" rel=\"attachment wp-att-21511\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/10\/giphy.gif\" alt=\"\" width=\"480\" height=\"270\" class=\"aligncenter size-full wp-image-21511\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>DataBindingComponent\ub780? DataBindingComponent\ub294 BindingAdapter\uc5d0 \ub300\ud55c getter\ub97c \ud3ec\ud568\ud558\ub294 \uc778\ud130\ud398\uc774\uc2a4\ub2e4.\u00a0 DataBindingComponent\ub97c \uad6c\ud604\ud558\ub294 \ud074\ub798\uc2a4\ub294 \ubc18\ub4dc\uc2dc \ud558\ub098\uc774\uc0c1\uc758 \uba54\uc11c\ub4dc\ub97c \uac00\uc838\uc57c\ud55c\ub2e4. \uba54\uc11c\ub4dc\uc758 \uc774\ub984\uc740 \uc811\ub450\uc5b4 get\uacfc @BindingAdapter \uba54\uc11c\ub4dc\ub97c \ud3ec\ud568\ud558\ub294 \ud074\ub798\uc2a4 \ub610\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc758 \uc774\ub984\uc758 \ud569\uc131\uc5b4\uc5ec\uc57c\ud55c\ub2e4. \uc608\ub97c\ub4e4\uc5b4 @BindingAdapter \uba54\uc11c\ub4dc\ub97c \uac00\uc9c0\uace0 \uc788\ub294 \ud074\ub798\uc2a4\uc758 \uc774\ub984\uc774 ClickBinding\uc774\ub77c\uba74 DataBindingComponent\uad6c\ud604\uccb4\uac00 \uac16\ub294 \uba54\uc11c\ub4dc\uc758 \uc774\ub984\uc740\u00a0 getClickBinding()\uc774 \ub41c\ub2e4. \ub2e4\uc74c \uc608\uc81c \ucf54\ub4dc\ub4e4\uc740 \ub370\uc774\ud130\ubc14\uc778\ub529 \ud074\ub798\uc2a4\ub97c \ucd08\uae30\ud654 \ud560 \ub54c \uc8fc\ub85c \uc0ac\uc6a9\ub418\ub294 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[16],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/21509"}],"collection":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=21509"}],"version-history":[{"count":5,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/21509\/revisions"}],"predecessor-version":[{"id":43835,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/21509\/revisions\/43835"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=21509"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21509"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}