PageRenderTime 71ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/index.html

https://github.com/ando19721226/Backbone
HTML | 2735 lines | 2371 code | 300 blank | 64 comment | 0 complexity | a02703c3e5763caf34b6b672acf16a5e MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. <!DOCTYPE HTML>
  2. <html lang="ja">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>Backbone.js 日本語リファレンス</title>
  6. <link href="http://getbootstrap.com/2.3.2/assets/css/bootstrap.css" rel="stylesheet" />
  7. <link rel="icon" href="http://backbonejs.org/docs/images/favicon.ico" />
  8. <style type="text/css">
  9. @media print {
  10. .no-print { display: none }
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. <div class="container">
  16. <h1>Backbone.js 日本語リファレンス</h1>
  17. <div class="alert alert-info">
  18. このドキュメントは<a href="http://www.adventar.org/calendars/15">Backbone.js Advent Calendar 2012</a> 6日目にエントリーしたものです<br />2012年12月現在での <code>Edge Version</code> を元に作成しました安定版の0.9.2とは異なる部分があります
  19. </div>
  20. <ul class="no-print">
  21. <li>Events</li>
  22. <ul>
  23. <li><a href="#Events-on">on</a></li>
  24. <li><a href="#Events-off">off</a></li>
  25. <li><a href="#Events-trigger">trigger</a></li>
  26. <li><a href="#Events-once">once</a></li>
  27. <li><a href="#Events-listenTo">listenTo</a></li>
  28. <li><a href="#Events-stopListening">stopListening</a></li>
  29. </ul>
  30. <li>Model</li>
  31. <ul>
  32. <li><a href="#Model-extend">extend</a></li>
  33. <li><a href="#Model-constractor">constractor</a></li>
  34. <li><a href="#Model-initialize">initialize</a></li>
  35. <li><a href="#Model-get">get</a></li>
  36. <li><a href="#Model-set">set</a></li>
  37. <li><a href="#Model-escape">escape</a></li>
  38. <li><a href="#Model-has">has</a></li>
  39. <li><a href="#Model-unset">unset</a></li>
  40. <li><a href="#Model-clear">clear</a></li>
  41. <li><a href="#Model-id">id</a></li>
  42. <li><a href="#Model-idAttribute">idAttribute</a></li>
  43. <li><a href="#Model-cid">cid</a></li>
  44. <li><a href="#Model-attributes">attributes</a></li>
  45. <li><a href="#Model-defaults">defaults</a></li>
  46. <li><a href="#Model-toJSON">toJSON</a></li>
  47. <li><a href="#Model-fetch">fetch</a></li>
  48. <li><a href="#Model-save">save</a></li>
  49. <li><a href="#Model-destroy">destroy</a></li>
  50. <li><a href="#Model-validate">validate</a></li>
  51. <li><a href="#Model-url">url</a></li>
  52. <li><a href="#Model-urlRoot">urlRoot</a></li>
  53. <li><a href="#Model-parse">parse</a></li>
  54. <li><a href="#Model-clone">clone</a></li>
  55. <li><a href="#Model-isNew">isNew</a></li>
  56. <li><a href="#Model-change">change</a></li>
  57. <li><a href="#Model-hasChanged">hasChanged</a></li>
  58. <li><a href="#Model-changedAttributes">changedAttributes</a></li>
  59. <li><a href="#Model-previous">previous</a></li>
  60. <li><a href="#Model-previousAttributes">previousAttributes</a></li>
  61. </ul>
  62. <li>Collection</li>
  63. <ul>
  64. <li><a href="#Collection-extend">extend</a></li>
  65. <li><a href="#Collection-constractor">constractor</a></li>
  66. <li><a href="#Collection-initialize">initialize</a></li>
  67. <li><a href="#Collection-model">model</a></li>
  68. <li><a href="#Collection-models">models</a></li>
  69. <li><a href="#Collection-toJSON">toJSON</a></li>
  70. <li><a href="#Collection-sync">sync</a></li>
  71. <li><a href="#Collection-UnderscoreMethods">Underscore Methods</a></li>
  72. <li><a href="#Collection-add">add</a></li>
  73. <li><a href="#Collection-remove">remove</a></li>
  74. <li><a href="#Collection-reset">reset</a></li>
  75. <li><a href="#Collection-update">update</a></li>
  76. <li><a href="#Collection-get">get</a></li>
  77. <li><a href="#Collection-at">at</a></li>
  78. <li><a href="#Collection-push">push</a></li>
  79. <li><a href="#Collection-pop">pop</a></li>
  80. <li><a href="#Collection-unshift">unshift</a></li>
  81. <li><a href="#Collection-shift">shift</a></li>
  82. <li><a href="#Collection-slice">slice</a></li>
  83. <li><a href="#Collection-length">length</a></li>
  84. <li><a href="#Collection-comparator">comparator</a></li>
  85. <li><a href="#Collection-sort">sort</a></li>
  86. <li><a href="#Collection-pluck">pluck</a></li>
  87. <li><a href="#Collection-where">where</a></li>
  88. <li><a href="#Collection-url">url</a></li>
  89. <li><a href="#Collection-parse">parse</a></li>
  90. <li><a href="#Collection-clone">clone</a></li>
  91. <li><a href="#Collection-fetch">fetch</a></li>
  92. <li><a href="#Collection-create">create</a></li>
  93. </ul>
  94. <li>Router</li>
  95. <ul>
  96. <li><a href="#Router-extend">extend</a></li>
  97. <li><a href="#Router-constractor">constractor</a></li>
  98. <li><a href="#Router-initialize">initialize</a></li>
  99. <li><a href="#Router-routes">routes</a></li>
  100. <li><a href="#Router-route">route</a></li>
  101. <li><a href="#Router-navigate">navigate</a></li>
  102. </ul>
  103. <li>Sync</li>
  104. <ul>
  105. <li><a href="#Sync">Backbone.sync</a></li>
  106. <li><a href="#Sync-ajax">Backbone.ajax</a></li>
  107. <li><a href="#Sync-emulateHTTP">Backbone.emulateHTTP</a></li>
  108. <li><a href="#Sync-emulateJSON">Backbone.emulateJSON</a></li>
  109. </ul>
  110. <li>View</li>
  111. <ul>
  112. <li><a href="#View-extend">extend</a></li>
  113. <li><a href="#View-constractor">constractor</a></li>
  114. <li><a href="#View-initialize">initialize</a></li>
  115. <li><a href="#View-options">options</a></li>
  116. <li><a href="#View-el">el</a></li>
  117. <li><a href="#View-$el">$el</a></li>
  118. <li><a href="#View-setElement">setElement</a></li>
  119. <li><a href="#View-model">model</a></li>
  120. <li><a href="#View-collection">collection</a></li>
  121. <li><a href="#View-id">id</a></li>
  122. <li><a href="#View-attributes">attributes</a></li>
  123. <li><a href="#View-className">className</a></li>
  124. <li><a href="#View-tagName">tagName</a></li>
  125. <li><a href="#View-dollar">$ (jQuery or Zepto)</a></li>
  126. <li><a href="#View-render">render</a></li>
  127. <li><a href="#View-remove">remove</a></li>
  128. <li><a href="#View-make">make</a></li>
  129. <li><a href="#View-events">events</a></li>
  130. <li><a href="#View-delegateEvents">delegateEvents</a></li>
  131. <li><a href="#View-undelegateEvents">undelegateEvents</a></li>
  132. <li><a href="#View-cid">cid</a></li>
  133. </ul>
  134. </ul>
  135. <hr />
  136. <h2>Backbone.Events</h2>
  137. <hr />
  138. <!-- on -->
  139. <h3 id="Events-on">object.on(events, callback, [context])</h3>
  140. <p>
  141. オブジェクトに対してイベントが発火した時に呼び出したいコールバック関数を設定します
  142. </p>
  143. <h4>events</h4>
  144. <p>
  145. イベント名です半角スペースで区切って複数のイベント名を指定することもできます<code>all</code> を指定するとどのイベントが発火した場合にもコールバック関数が呼ばれます
  146. </p>
  147. <p>
  148. イベント名とコールバック関数のペアをオブジェクトリテラルで設定することもできますこの場合第2引数はcontextになります
  149. </p>
  150. <pre>
  151. var func1 = function () {
  152. console.log(this.msg1);
  153. };
  154. var func2 = function (model) {
  155. console.log(this.msg2);
  156. };
  157. var msg = {
  158. msg1: "Changed!",
  159. msg2: "Destroyed!"
  160. };
  161. var model = new Backbone.Model();
  162. model.on({change: func1, destroy: func2}, msg);
  163. model.set({name: "Tanaka"}); //-> Changed!
  164. model.destroy(); //-> Destroyed!
  165. </pre>
  166. <h4>callback</h4>
  167. <p>
  168. イベントが発火すると呼ばれるコールバック関数ですコールバック関数に渡される引数はイベントを発火させる<a href="#Events-trigger">triggerメソッド</a>が決定します
  169. </p>
  170. <p>
  171. Backbone.jsが発火するイベントとコールバック関数の引数の対応は以下の通りです
  172. </p>
  173. <p id="Events-eventList">
  174. <table class="table table-condensed table-bordered">
  175. <thead>
  176. <tr>
  177. <th>
  178. イベント
  179. </th>
  180. <th>
  181. 引数
  182. </th>
  183. </tr>
  184. </thead>
  185. <tbody>
  186. <tr>
  187. <td>
  188. add
  189. </td>
  190. <td>
  191. model, collection, options
  192. </td>
  193. </tr>
  194. <tr>
  195. <td>
  196. remove
  197. </td>
  198. <td>
  199. model, collection, options
  200. </td>
  201. </tr>
  202. <tr>
  203. <td>
  204. reset
  205. </td>
  206. <td>
  207. collection, options
  208. </td>
  209. </tr>
  210. <tr>
  211. <td>
  212. sort
  213. </td>
  214. <td>
  215. collection, options
  216. </td>
  217. </tr>
  218. <tr>
  219. <td>
  220. change
  221. </td>
  222. <td>
  223. model, options
  224. </td>
  225. </tr>
  226. <tr>
  227. <td>
  228. change:[attribute]
  229. </td>
  230. <td>
  231. model, value, options
  232. </td>
  233. </tr>
  234. <tr>
  235. <td>
  236. destroy
  237. </td>
  238. <td>
  239. model, collection, options
  240. </td>
  241. </tr>
  242. <tr>
  243. <td>
  244. request
  245. </td>
  246. <td>
  247. model, xhr, options
  248. </td>
  249. </tr>
  250. <tr>
  251. <td>
  252. sync
  253. </td>
  254. <td>
  255. model, resp, options
  256. </td>
  257. </tr>
  258. <tr>
  259. <td>
  260. error
  261. </td>
  262. <td>
  263. model, xhr, options または model, error, options
  264. </td>
  265. </tr>
  266. <tr>
  267. <td>
  268. route:[name]
  269. </td>
  270. <td>
  271. *argsURLと関連付けたコールバック関数に渡される引数
  272. </td>
  273. </tr>
  274. <tr>
  275. <td>
  276. all
  277. </td>
  278. <td>
  279. eventName, *argsイベントと関連付けたコールバック関数に渡される引数
  280. </td>
  281. </tr>
  282. </tbody>
  283. </table>
  284. </p>
  285. <h4>context</h4>
  286. <p>
  287. コールバック関数の中の<code>this</code>キーワードを束縛します
  288. </p>
  289. <hr />
  290. <!-- off -->
  291. <h3 id="Events-off">object.off([events], [callback], [context])</h3>
  292. <p>
  293. 設定されているイベントを削除します全ての引数を省略するとオブジェクトに設定されているイベントを全て削除します
  294. </p>
  295. <h4>events</h4>
  296. <p>
  297. 削除するイベント名です半角スペースで区切って複数のイベント名を指定することもできます省略する場合はnullを渡します
  298. </p>
  299. <h4>callback</h4>
  300. <p>
  301. 削除するイベントをコールバック関数で指定します省略する場合はnullを渡します
  302. </p>
  303. <h4>context</h4>
  304. <p>
  305. 削除するイベントを<code>this</code> に束縛しているオブジェクトで指定します省略する場合はnullを渡します
  306. </p>
  307. <hr />
  308. <!-- trigger -->
  309. <h3 id="Events-trigger">object.trigger(events, [*args])</h3>
  310. <p>
  311. イベントを発火しますまた<a href="#Events-on">onメソッド</a>で設定したコールバック関数へ渡す引数を指定します
  312. </p>
  313. <h4>events</h4>
  314. <p>
  315. 発火させるイベント名です複数のイベントを空白で区切って指定できます
  316. </p>
  317. <h4>args</h4>
  318. <p>
  319. イベントと関連付けされているコールバック関数の引数に渡されます
  320. </p>
  321. <pre>
  322. var user = {name: "Tanaka"};
  323. _.extend(user, Backbone.Events);
  324. user.on("Say", function (obj, msg) {
  325. console.log(obj.name + " said " + msg);
  326. });
  327. user.trigger("Say", user, "Hello."); //-> Tanaka said Hello.
  328. </pre>
  329. <p>
  330. なおBackbone.jsのコレクションは所有するモデルの全てのイベントを監視しておりモデルがイベントを発火すると同じイベントを発火します
  331. </p>
  332. <pre>
  333. var User = Backbone.Model.extend({
  334. validate: function (attr) {
  335. if (_.isEmpty(attr.name)) {
  336. return "invalid!";
  337. }
  338. }
  339. });
  340. var user = new User();
  341. var users = new Backbone.Collection();
  342. users.add(user);
  343. users.on("all", function (eventName) {
  344. console.log(eventName);
  345. });
  346. user.set({name:"tanaka"});
  347. //-> change:name
  348. //-> change
  349. user.set({name:""});
  350. //-> error
  351. </pre>
  352. <p>
  353. Backbone.jsのメソッドと発火されるイベントの対応は以下の通りです
  354. </p>
  355. <p>
  356. <table class="table table-bordered table-condensed">
  357. <thead>
  358. <tr>
  359. <th>
  360. メソッド イベント
  361. </th>
  362. <td style="width:60px">
  363. add
  364. </td>
  365. <td style="width:60px">
  366. remove
  367. </td>
  368. <td style="width:60px">
  369. reset
  370. </td>
  371. <td style="width:60px">
  372. sort
  373. </td>
  374. <td style="width:60px">
  375. change
  376. </td>
  377. <td style="width:60px">
  378. destroy
  379. </td>
  380. <td style="width:60px">
  381. request
  382. </td>
  383. <td style="width:60px">
  384. sync
  385. </td>
  386. <td style="width:60px">
  387. error
  388. </td>
  389. <td style="width:60px">
  390. route
  391. </td>
  392. </tr>
  393. </thead>
  394. <tbody>
  395. <tr>
  396. <td>
  397. model.set
  398. </td>
  399. <td> <!-- add -->
  400. </td>
  401. <td> <!-- remove -->
  402. </td>
  403. <td> <!-- reset -->
  404. </td>
  405. <td> <!-- sort -->
  406. </td>
  407. <td> <!-- change -->
  408. <div class="icon icon-ok">
  409. </td>
  410. <td> <!-- destroy -->
  411. </td>
  412. <td> <!-- request -->
  413. </td>
  414. <td> <!-- sync -->
  415. </td>
  416. <td> <!-- error -->
  417. <div class="icon icon-ok">
  418. </td>
  419. <td> <!-- route -->
  420. </td>
  421. </tr>
  422. <tr>
  423. <td>
  424. model.unset
  425. </td>
  426. <td> <!-- add -->
  427. </td>
  428. <td> <!-- remove -->
  429. </td>
  430. <td> <!-- reset -->
  431. </td>
  432. <td> <!-- sort -->
  433. </td>
  434. <td> <!-- change -->
  435. <div class="icon icon-ok">
  436. </td>
  437. <td> <!-- destroy -->
  438. </td>
  439. <td> <!-- request -->
  440. </td>
  441. <td> <!-- sync -->
  442. </td>
  443. <td> <!-- error -->
  444. <div class="icon icon-ok">
  445. </td>
  446. <td> <!-- route -->
  447. </td>
  448. </tr>
  449. <tr>
  450. <td>
  451. model.clear
  452. </td>
  453. <td> <!-- add -->
  454. </td>
  455. <td> <!-- remove -->
  456. </td>
  457. <td> <!-- reset -->
  458. </td>
  459. <td> <!-- sort -->
  460. </td>
  461. <td> <!-- change -->
  462. <div class="icon icon-ok">
  463. </td>
  464. <td> <!-- destroy -->
  465. </td>
  466. <td> <!-- request -->
  467. </td>
  468. <td> <!-- sync -->
  469. </td>
  470. <td> <!-- error -->
  471. <div class="icon icon-ok">
  472. </td>
  473. <td> <!-- route -->
  474. </td>
  475. </tr>
  476. <tr>
  477. <td>
  478. model.fetch
  479. </td>
  480. <td> <!-- add -->
  481. </td>
  482. <td> <!-- remove -->
  483. </td>
  484. <td> <!-- reset -->
  485. </td>
  486. <td> <!-- sort -->
  487. </td>
  488. <td> <!-- change -->
  489. <div class="icon icon-ok">
  490. </td>
  491. <td> <!-- destroy -->
  492. </td>
  493. <td> <!-- request -->
  494. <div class="icon icon-ok">
  495. </td>
  496. <td> <!-- sync -->
  497. <div class="icon icon-ok">
  498. </td>
  499. <td> <!-- error -->
  500. <div class="icon icon-ok">
  501. </td>
  502. <td> <!-- route -->
  503. </td>
  504. </tr>
  505. <tr>
  506. <td>
  507. model.save
  508. </td>
  509. <td> <!-- add -->
  510. </td>
  511. <td> <!-- remove -->
  512. </td>
  513. <td> <!-- reset -->
  514. </td>
  515. <td> <!-- sort -->
  516. </td>
  517. <td> <!-- change -->
  518. <div class="icon icon-ok">
  519. </td>
  520. <td> <!-- destroy -->
  521. </td>
  522. <td> <!-- request -->
  523. <div class="icon icon-ok">
  524. </td>
  525. <td> <!-- sync -->
  526. <div class="icon icon-ok">
  527. </td>
  528. <td> <!-- error -->
  529. <div class="icon icon-ok">
  530. </td>
  531. <td> <!-- route -->
  532. </td>
  533. </tr>
  534. <tr>
  535. <td>
  536. model.destroy
  537. </td>
  538. <td> <!-- add -->
  539. </td>
  540. <td> <!-- remove -->
  541. </td>
  542. <td> <!-- reset -->
  543. </td>
  544. <td> <!-- sort -->
  545. </td>
  546. <td> <!-- change -->
  547. </td>
  548. <td> <!-- destroy -->
  549. <div class="icon icon-ok">
  550. </td>
  551. <td> <!-- request -->
  552. <div class="icon icon-ok">
  553. </td>
  554. <td> <!-- sync -->
  555. <div class="icon icon-ok">
  556. </td>
  557. <td> <!-- error -->
  558. <div class="icon icon-ok">
  559. </td>
  560. <td> <!-- route -->
  561. </td>
  562. </tr>
  563. <tr>
  564. <td>
  565. model.validate
  566. </td>
  567. <td> <!-- add -->
  568. </td>
  569. <td> <!-- remove -->
  570. </td>
  571. <td> <!-- reset -->
  572. </td>
  573. <td> <!-- sort -->
  574. </td>
  575. <td> <!-- change -->
  576. </td>
  577. <td> <!-- destroy -->
  578. </td>
  579. <td> <!-- request -->
  580. </td>
  581. <td> <!-- sync -->
  582. </td>
  583. <td> <!-- error -->
  584. <div class="icon icon-ok">
  585. </td>
  586. <td> <!-- route -->
  587. </td>
  588. </tr>
  589. <tr>
  590. <td>
  591. model.change
  592. </td>
  593. <td> <!-- add -->
  594. </td>
  595. <td> <!-- remove -->
  596. </td>
  597. <td> <!-- reset -->
  598. </td>
  599. <td> <!-- sort -->
  600. </td>
  601. <td> <!-- change -->
  602. <div class="icon icon-ok">
  603. </td>
  604. <td> <!-- destroy -->
  605. </td>
  606. <td> <!-- request -->
  607. </td>
  608. <td> <!-- sync -->
  609. </td>
  610. <td> <!-- error -->
  611. </td>
  612. <td> <!-- route -->
  613. </td>
  614. </tr>
  615. <tr>
  616. <td>
  617. collection.add
  618. </td>
  619. <td> <!-- add -->
  620. <div class="icon icon-ok">
  621. </td>
  622. <td> <!-- remove -->
  623. </td>
  624. <td> <!-- reset -->
  625. </td>
  626. <td> <!-- sort -->
  627. </td>
  628. <td> <!-- change -->
  629. </td>
  630. <td> <!-- destroy -->
  631. </td>
  632. <td> <!-- request -->
  633. </td>
  634. <td> <!-- sync -->
  635. </td>
  636. <td> <!-- error -->
  637. </td>
  638. <td> <!-- route -->
  639. </td>
  640. </tr>
  641. <tr>
  642. <td>
  643. collection.push
  644. </td>
  645. <td> <!-- add -->
  646. <div class="icon icon-ok">
  647. </td>
  648. <td> <!-- remove -->
  649. </td>
  650. <td> <!-- reset -->
  651. </td>
  652. <td> <!-- sort -->
  653. </td>
  654. <td> <!-- change -->
  655. </td>
  656. <td> <!-- destroy -->
  657. </td>
  658. <td> <!-- request -->
  659. </td>
  660. <td> <!-- sync -->
  661. </td>
  662. <td> <!-- error -->
  663. </td>
  664. <td> <!-- route -->
  665. </td>
  666. </tr>
  667. <tr>
  668. <td>
  669. collection.unshift
  670. </td>
  671. <td> <!-- add -->
  672. <div class="icon icon-ok">
  673. </td>
  674. <td> <!-- remove -->
  675. </td>
  676. <td> <!-- reset -->
  677. </td>
  678. <td> <!-- sort -->
  679. </td>
  680. <td> <!-- change -->
  681. </td>
  682. <td> <!-- destroy -->
  683. </td>
  684. <td> <!-- request -->
  685. </td>
  686. <td> <!-- sync -->
  687. </td>
  688. <td> <!-- error -->
  689. </td>
  690. <td> <!-- route -->
  691. </td>
  692. </tr>
  693. <tr>
  694. <td>
  695. collection.remove
  696. </td>
  697. <td> <!-- add -->
  698. </td>
  699. <td> <!-- remove -->
  700. <div class="icon icon-ok">
  701. </td>
  702. <td> <!-- reset -->
  703. </td>
  704. <td> <!-- sort -->
  705. </td>
  706. <td> <!-- change -->
  707. </td>
  708. <td> <!-- destroy -->
  709. </td>
  710. <td> <!-- request -->
  711. </td>
  712. <td> <!-- sync -->
  713. </td>
  714. <td> <!-- error -->
  715. </td>
  716. <td> <!-- route -->
  717. </td>
  718. </tr>
  719. <tr>
  720. <td>
  721. collection.pop
  722. </td>
  723. <td> <!-- add -->
  724. </td>
  725. <td> <!-- remove -->
  726. <div class="icon icon-ok">
  727. </td>
  728. <td> <!-- reset -->
  729. </td>
  730. <td> <!-- sort -->
  731. </td>
  732. <td> <!-- change -->
  733. </td>
  734. <td> <!-- destroy -->
  735. </td>
  736. <td> <!-- request -->
  737. </td>
  738. <td> <!-- sync -->
  739. </td>
  740. <td> <!-- error -->
  741. </td>
  742. <td> <!-- route -->
  743. </td>
  744. </tr>
  745. <tr>
  746. <td>
  747. collection.shift
  748. </td>
  749. <td> <!-- add -->
  750. </td>
  751. <td> <!-- remove -->
  752. <div class="icon icon-ok">
  753. </td>
  754. <td> <!-- reset -->
  755. </td>
  756. <td> <!-- sort -->
  757. </td>
  758. <td> <!-- change -->
  759. </td>
  760. <td> <!-- destroy -->
  761. </td>
  762. <td> <!-- request -->
  763. </td>
  764. <td> <!-- sync -->
  765. </td>
  766. <td> <!-- error -->
  767. </td>
  768. <td> <!-- route -->
  769. </td>
  770. </tr>
  771. <tr>
  772. <td>
  773. collection.sort
  774. </td>
  775. <td> <!-- add -->
  776. </td>
  777. <td> <!-- remove -->
  778. </td>
  779. <td> <!-- reset -->
  780. </td>
  781. <td> <!-- sort -->
  782. <div class="icon icon-ok">
  783. </td>
  784. <td> <!-- change -->
  785. </td>
  786. <td> <!-- destroy -->
  787. </td>
  788. <td> <!-- request -->
  789. </td>
  790. <td> <!-- sync -->
  791. </td>
  792. <td> <!-- error -->
  793. </td>
  794. <td> <!-- route -->
  795. </td>
  796. </tr>
  797. <tr>
  798. <td>
  799. collection.reset
  800. </td>
  801. <td> <!-- add -->
  802. </td>
  803. <td> <!-- remove -->
  804. </td>
  805. <td> <!-- reset -->
  806. <div class="icon icon-ok">
  807. </td>
  808. <td> <!-- sort -->
  809. </td>
  810. <td> <!-- change -->
  811. </td>
  812. <td> <!-- destroy -->
  813. </td>
  814. <td> <!-- request -->
  815. </td>
  816. <td> <!-- sync -->
  817. </td>
  818. <td> <!-- error -->
  819. </td>
  820. <td> <!-- route -->
  821. </td>
  822. </tr>
  823. <tr>
  824. <td>
  825. collection.fetch
  826. </td>
  827. <td> <!-- add -->
  828. <div class="icon icon-ok">
  829. </td>
  830. <td> <!-- remove -->
  831. </td>
  832. <td> <!-- reset -->
  833. <div class="icon icon-ok">
  834. </td>
  835. <td> <!-- sort -->
  836. </td>
  837. <td> <!-- change -->
  838. </td>
  839. <td> <!-- destroy -->
  840. </td>
  841. <td> <!-- request -->
  842. <div class="icon icon-ok">
  843. </td>
  844. <td> <!-- sync -->
  845. <div class="icon icon-ok">
  846. </td>
  847. <td> <!-- error -->
  848. <div class="icon icon-ok">
  849. </td>
  850. <td> <!-- route -->
  851. </td>
  852. </tr>
  853. <tr>
  854. <td>
  855. collection.create
  856. </td>
  857. <td> <!-- add -->
  858. <div class="icon icon-ok">
  859. </td>
  860. <td> <!-- remove -->
  861. </td>
  862. <td> <!-- reset -->
  863. </td>
  864. <td> <!-- sort -->
  865. </td>
  866. <td> <!-- change -->
  867. </td>
  868. <td> <!-- destroy -->
  869. </td>
  870. <td> <!-- request -->
  871. <div class="icon icon-ok">
  872. </td>
  873. <td> <!-- sync -->
  874. <div class="icon icon-ok">
  875. </td>
  876. <td> <!-- error -->
  877. <div class="icon icon-ok">
  878. </td>
  879. <td> <!-- route -->
  880. </td>
  881. </tr>
  882. <tr>
  883. <td>
  884. router.navigate
  885. </td>
  886. <td> <!-- add -->
  887. </td>
  888. <td> <!-- remove -->
  889. </td>
  890. <td> <!-- reset -->
  891. </td>
  892. <td> <!-- sort -->
  893. </td>
  894. <td> <!-- change -->
  895. </td>
  896. <td> <!-- destroy -->
  897. </td>
  898. <td> <!-- request -->
  899. </td>
  900. <td> <!-- sync -->
  901. </td>
  902. <td> <!-- error -->
  903. </td>
  904. <td> <!-- route -->
  905. <div class="icon icon-ok">
  906. </td>
  907. </tr>
  908. </tbody>
  909. </table>
  910. </p>
  911. <hr />
  912. <!-- once -->
  913. <h3 id="Events-on">object.once(events, callback, [context])</h3>
  914. <p>
  915. </p>
  916. <hr />
  917. <!-- listenTo -->
  918. <h3 id="Events-listenTo">object.listenTo(other, event, callback)</h3>
  919. <p>
  920. </p>
  921. <hr />
  922. <!-- stopListening -->
  923. <h3 id="Events-stopListening">object.stopListening([other], [event], [callback])</h3>
  924. <p>
  925. </p>
  926. <hr />
  927. <h2>Backbone.Model</h2>
  928. <hr />
  929. <!-- extend -->
  930. <h3 id="Model-extend">Backbone.Model.extend([properties], [classProperties])</h3>
  931. <p>
  932. <code>Backbone.Model</code> を継承した新しいモデルを作ります
  933. </p>
  934. <h4>properties</h4>
  935. <p>
  936. インスタンスメンバを定義します
  937. </p>
  938. <pre>
  939. var User = Backbone.Model.extend({
  940. say: function () {
  941. console.log("Hello.");
  942. }
  943. });
  944. var user = new User();
  945. user.say(); //-> Hello.
  946. </pre>
  947. <h4>classProperties</h4>
  948. <p>
  949. 静的メンバを定義します以下はFactoryパターンの例です
  950. </p>
  951. <pre>
  952. var User = Backbone.Model.extend({
  953. openFile: function () {
  954. console.log(this.canOpen);
  955. }
  956. }, {
  957. create: function (type) {
  958. if (type === "admin") {
  959. return new AdminUser;
  960. } else {
  961. return new NormalUser;
  962. }
  963. }
  964. });
  965. var AdminUser = User.extend({
  966. canOpen: true
  967. });
  968. var NormalUser = User.extend({
  969. canOpen: false
  970. });
  971. var user1 = User.create("admin");
  972. var user2 = User.create("normal");
  973. user1.openFile(); //-> true
  974. user2.openFile(); //-> false
  975. </pre>
  976. <hr />
  977. <!-- constractor -->
  978. <h3 id="Model-constractor">new Model([attributes], [options])</h3>
  979. <p>
  980. コンストラクタです
  981. </p>
  982. <h4>attributes</h4>
  983. <p>モデルの属性へ設定したい値をオブジェクトリテラルで指定します</p>
  984. <pre>
  985. var Model = Backbone.Model.extend();
  986. var model = new Model({name: "Tanaka", country: "Japan"});
  987. </pre>
  988. <h4>options</h4>
  989. <p>
  990. <code>options.parse = true</code> を設定すると<a href="#Model-parse">parseメソッド</a>を実行します
  991. </p>
  992. <pre>
  993. var User = Backbone.Model.extend({
  994. parse: function (response) {
  995. return response.user;
  996. }
  997. });
  998. var user = new User({user: {name: "Tanaka"}}, {parse: true});
  999. console.log(user.toJSON()); //-> {name: "Tanaka"}
  1000. </pre>
  1001. <p>
  1002. <code>options.collection</code> にコレクションを設定すると<a href="#Model-url">urlメソッド</a>でモデルのURLをすぐに取得できるようになりますただしこの時点ではモデルからコレクションへの一方的な参照がなされているだけでコレクションにモデルが格納されたのではありません
  1003. </p>
  1004. <pre>
  1005. var users = new Backbone.Collection();
  1006. users.url = "/hoge";
  1007. var User = Backbone.Model.extend();
  1008. var user = new User({id: 1, name: "Tanaka"}, {collection: users});
  1009. console.log(user.url()); //-> /hoge/1
  1010. console.log(users.length); //-> 0
  1011. </pre>
  1012. <p>
  1013. その他に<a href="#Model-initialize">initializeメソッド</a>へ一時的な値を渡す用途に利用できます
  1014. </p>
  1015. <hr />
  1016. <!-- initialize -->
  1017. <h3 id="Model-initialize">model.initialize([attributes], [options])</h3>
  1018. <p>
  1019. インスタンス生成時に呼ばれます
  1020. </p>
  1021. <h4>attributes</h4>
  1022. <p><a href="#Model-constractor">コンストラクタ</a>のattributesへ渡した値です</p>
  1023. <h4>options</h4>
  1024. <p><a href="#Model-constractor">コンストラクタ</a>のoptionsへ渡した値です</p>
  1025. <hr />
  1026. <!-- get -->
  1027. <h3 id="Model-get">model.get(attribute)</h3>
  1028. <p>
  1029. モデルの属性値を取得します
  1030. </p>
  1031. <hr />
  1032. <!-- set -->
  1033. <h3 id="Model-set">model.set(key, value, [options]) または set(attributes, [options])</h3>
  1034. <p>
  1035. モデルの属性値を設定します属性値が現在の属性値と異なる場合<a href="#Events-eventList">changeイベント</a>を発火しますまた<a href="#Model-validate">validateメソッド</a>を実行します
  1036. </p>
  1037. <h4>key, value</h4>
  1038. <p>
  1039. keyとvalueのペアで指定します
  1040. </p>
  1041. <pre>
  1042. model.set("name", "Tanaka");
  1043. model.set("country", "Japan");
  1044. </pre>
  1045. <h4>attributes</h4>
  1046. <p>
  1047. オブジェクトリテラルで指定することもできます
  1048. </p>
  1049. <pre>
  1050. model.set({name: "Tanaka", country: "Japan"});
  1051. </pre>
  1052. <h4>options</h4>
  1053. <p>
  1054. <code>options.silent = true</code> を設定すると<a href="#Events-eventList">changeイベント</a>を発火しません
  1055. </p>
  1056. <pre>
  1057. var Model = Backbone.Model.extend({
  1058. validate: function (attrs) {
  1059. if (_.isEmpty(attrs.name)) {
  1060. return "invalid!";
  1061. }
  1062. }
  1063. });
  1064. var model = new Model();
  1065. model.on("change", function () {
  1066. console.log("changed!");
  1067. });
  1068. model.on("error", function (model, error) {
  1069. console.log(error);
  1070. });
  1071. model.set({name: "Tanaka"}); //-> "changed!"
  1072. model.set({name: "Suzuki"}, {silent: true});
  1073. model.set({name: ""}); //-> "invalid!"
  1074. model.set({name: ""}, {silent: true});
  1075. </pre>
  1076. <hr />
  1077. <!-- escape -->
  1078. <h3 id="Model-escape">model.escape(attribute)</h3>
  1079. <p>
  1080. <a href="#Model-get">getメソッド</a>と同じくモデルの属性値を取得しますがHTMLをエスケープします
  1081. </p>
  1082. <hr />
  1083. <!-- has -->
  1084. <h3 id="Model-has">model.has(attribute)</h3>
  1085. <p>
  1086. モデルが属性そのものを持っているかどうかを返します
  1087. </p>
  1088. <pre>
  1089. var model = new Backbone.Model({name: ""});
  1090. console.log(model.has("name")); //-> true
  1091. console.log(model.has("country")); //-> false
  1092. </pre>
  1093. <hr />
  1094. <!-- unset -->
  1095. <h3 id="Model-unset">model.unset(attribute, [options])</h3>
  1096. <p>
  1097. モデルから属性そのものを削除します存在する属性であれば <a href="#Events-eventList">changeイベント</a>を発火しますまた<a href="#Model-validate">validateメソッド</a>を実行します
  1098. </p>
  1099. <h4>options</h4>
  1100. <p>
  1101. <code>options.silent = true</code> を設定すると<a href="#Events-eventList">changeイベント</a>を発火しません
  1102. </p>
  1103. <hr />
  1104. <!-- clear -->
  1105. <h3 id="Model-clear">model.clear([options])</h3>
  1106. <p>
  1107. モデルから属性そのものを全て削除します属性が1つでも存在すれば <a href="#Events-eventList">changeイベント</a>を発火しますまた<a href="#Model-validate">validateメソッド</a>を実行します
  1108. </p>
  1109. <h4>options</h4>
  1110. <p>
  1111. <code>options.silent = true</code> を設定すると<a href="#Events-eventList">changeイベント</a>を発火しません
  1112. </p>
  1113. <hr />
  1114. <!-- id -->
  1115. <h3 id="Model-id">model.id</h3>
  1116. <p>
  1117. モデルを一意に識別するための識別子ですコレクションの中からモデルを取り出す際のキーとして使用したりモデルごとに決まるURLの一部に使用されたりします
  1118. </p>
  1119. <p>
  1120. idは通常<a href="#Model-fetch">fetchメソッド</a><a href="#Model-save">saveメソッド</a>によってバックエンド側で決定されますがクライアントサイドで手動でidを設定する場合には<a href="#Model-set">setメソッド</a>でモデルの属性値として設定しますモデルのidプロパティは自動的にその値を参照してくれます
  1121. </p>
  1122. <pre>
  1123. var model = new Backbone.Model({
  1124. id: 1,
  1125. name: "Tanaka"
  1126. });
  1127. console.log(model.toJSON()); //-> {id: 1, name: "Tanaka"}
  1128. console.log(model.id); //-> 1
  1129. </pre>
  1130. <p>
  1131. <a href="#Model-set">setメソッド</a>で設定せずにidプロパティに直接設定することも可能ですがモデルの属性値は変化しませんので注意が必要です
  1132. </p>
  1133. <pre>
  1134. var model = new Backbone.Model({
  1135. name: "Tanaka"
  1136. });
  1137. model.id = 1;
  1138. console.log(model.id); //-> 1
  1139. console.log(model.toJSON()); //-> {name: "Tanaka"}
  1140. model = new Backbone.Model({
  1141. id: 1,
  1142. name: "Tanaka"
  1143. });
  1144. model.id = 2;
  1145. console.log(model.id); //-> 2
  1146. console.log(model.toJSON()); //-> {id: 1, name: "Tanaka"}
  1147. </pre>
  1148. <hr />
  1149. <!-- idAttribute -->
  1150. <h3 id="Model-idAttribute">model.idAttribute</h3>
  1151. <p>
  1152. モデルの属性の"id"というネーミングは変更できます例えばバックエンドのデータベースのカラム名と合わせると便利ですただしモデルの<a href="#Model-id">idプロパティ</a>"id"のままです
  1153. </p>
  1154. <pre>
  1155. var Model = Backbone.Model.extend({
  1156. idAttribute: "user_id"
  1157. });
  1158. var model = new Model({
  1159. user_id: 1,
  1160. name: "Tanaka"
  1161. });
  1162. console.log(model.id); //-> 1
  1163. console.log(model.toJSON()); //-> {user_id: 1, name: "Tanaka"}
  1164. console.log(model.user_id); //-> undefined
  1165. </pre>
  1166. <hr />
  1167. <!-- cid -->
  1168. <h3 id="Model-cid">model.cid</h3>
  1169. <p>
  1170. インスタンス生成時に自動的に振られるユニークな識別子です
  1171. </p>
  1172. <hr />
  1173. <!-- attributes -->
  1174. <h3 id="Model-attributes">model.attributes</h3>
  1175. <p>
  1176. モデルの属性が格納されているプロパティです属性に値を設定する場合このプロパティを直接更新することでも可能ですがイベントの発火などを機能させるために<a href="#Model-set">setメソッド</a>を使用します
  1177. </p>
  1178. <hr />
  1179. <!-- defaults -->
  1180. <h3 id="Model-defaults">model.defaults または model.defaults()</h3>
  1181. <p>
  1182. モデルの属性の初期値を設定します関数として定義することも可能です
  1183. </p>
  1184. <pre>
  1185. var Model = Backbone.Model.extend({
  1186. defaults: function () {
  1187. return {
  1188. name: "Tanaka",
  1189. country: "Japan"
  1190. }
  1191. }
  1192. });
  1193. var model = new Model();
  1194. console.log(model.toJSON()); //-> {name: "Tanaka", country: "Japan"}
  1195. </pre>
  1196. <hr />
  1197. <!-- toJSON -->
  1198. <h3 id="Model-toJSON">model.toJSON()</h3>
  1199. <p>
  1200. <a href="#Model-attributes">attributesプロパティ</a>を複製したオブジェクトを返しますJSON文字列に変換するのではありません
  1201. </p>
  1202. <pre>
  1203. var model = new Backbone.Model({
  1204. name: "Tanaka"
  1205. });
  1206. console.log(model.toJSON()); //-> { name: "Tanaka"}
  1207. console.log(JSON.stringify(model.attributes)); //-> "{"name": "Tanaka"}"
  1208. </pre>
  1209. <hr />
  1210. <!-- fetch -->
  1211. <h3 id="Model-fetch">model.fetch([options])</h3>
  1212. <p>
  1213. バックエンドとHTTPリクエストのGETメソッドで通信してリソースの取得を要求します取得結果を<a href="#Model-parse">parseメソッド</a>で変換してからモデルの属性に設定します<a href="#Model-validate">validateメソッド</a>も実行しますリクエスト先のURLは<a href="#Model-url">urlメソッド</a>で決まります
  1214. </p>
  1215. <p>
  1216. 通信開始時に<a href="#Events-eventList">requestイベント</a>を発火します正常を表すHTTPステータスが返って来た場合<a href="#Events-eventList">syncイベント</a>を発火しますまた取得結果をモデルの属性に設定する際にfetch前の値と異なる場合には <a href="#Events-eventList">changeイベント</a>を発火します
  1217. </p>
  1218. <p>
  1219. 異常を表すHTTPステータスが返って来た場合<a href="#Events-eventList">errorイベント</a>を発火します
  1220. </p>
  1221. <h4>options</h4>
  1222. <p>
  1223. <code>options.silent = true</code> を設定すると<a href="#Events-eventList">changeイベント</a>を発火しません
  1224. </p>
  1225. <hr />
  1226. <!-- save -->
  1227. <h3 id="Model-save">model.save([key, value], [options]) または model.save([attributes], [options])</h3>
  1228. <p>
  1229. バックエンドとHTTPリクエストのPOSTまたはPUTメソッドで通信してリソースの新規作成または更新を要求しますモデルの<a href="#Model-id">idプロパティ</a>が設定されていない場合はPOSTメソッド設定されている場合はPUTメソッドで通信しますリクエスト先のURLは<a href="#Model-url">urlメソッド</a>で決まります
  1230. </p>
  1231. <p>
  1232. まずモデルに設定されている属性値およびこのメソッドの引数に渡した属性値は<a href="#Model-validate">validateメソッド</a>で検証されます検証結果に問題があった場合このメソッドはfalseを返却します次にこのメソッドの引数に属性値を渡したのであればモデルの属性値に反映され反映前と反映後とで値が変化するのであれば <a href="#Events-eventList">changeイベント</a>を発火しますただし後述する <code>options.wait = true</code> を設定している場合には属性値の反映は保留され<a href="#Events-eventList">changeイベント</a>も発火しません
  1233. </p>
  1234. <p>
  1235. バックエンドとの通信開始時に<a href="#Events-eventList">requestイベント</a>を発火します通信した結果正常を表すHTTPステータスが返って来た場合バックエンドから取得した属性値は<a href="#Model-parse">parseメソッド</a>で変換してからモデルの属性に設定しますこの時<a href="#Model-validate">validateメソッド</a>を実行し検証結果に問題があった場合このメソッドはfalseを返してバックエンドから取得した属性値はモデルの属性に反映されませんまたモデルの属性値とバックエンドから取得した属性値とが異なる場合には<a href="#Events-eventList">changeイベント</a>を発火します最後に<a href="#Events-eventList">syncイベント</a>を発火します
  1236. </p>
  1237. <p>
  1238. 異常を表すHTTPステータスが返って来た場合<a href="#Events-eventList">errorイベント</a>を発火しますこのメソッドは通信結果に関わらずjqXHRオブジェクトを返します
  1239. </p>
  1240. <h4>options</h4>
  1241. <p>
  1242. <code>options.silent = true</code> を設定すると<a href="#Events-eventList">changeイベント</a>を発火しません
  1243. </p>
  1244. <p>
  1245. このメソッドの引数に渡した属性値はモデルの属性値へ即座に反映されますが<code>options.wait = true</code> を設定するとサーバの応答を待ってから反映するようにタイミングを変えることができます
  1246. </p>
  1247. <hr />
  1248. <!-- destroy -->
  1249. <h3 id="Model-destroy">model.destroy([options])</h3>
  1250. <p>
  1251. バックエンドとHTTPリクエストのDELETEメソッドで通信してリソースの破棄を要求しますリクエスト先のURLは<a href="#Model-url">urlメソッド</a>で決まります
  1252. </p>
  1253. <p>
  1254. 通信開始時に<a href="#Events-eventList">requestイベント</a>を発火します正常を表すHTTPステータスが返って来た場合<a href="#Events-eventList">syncイベント</a>を発火しますこの時<a href="#Events-eventList">destroyイベント</a>を発火しますモデルがコレクションに所有されている場合は自動的にコレクションからも削除されます
  1255. </p>
  1256. <p>
  1257. 異常を表すHTTPステータスが返って来た場合<a href="#Events-eventList">errorイベント</a>を発火します<a href="#Events-eventList">destroyイベント</a>は発火しません
  1258. </p>
  1259. <p>
  1260. このメソッドは通信結果に関わらずjqXHRオブジェクトを返しますただしモデルに<a href="#Model-id">idプロパティ</a>が設定されていない場合は通信せずこのメソッドはfalseを返しますこの時<a href="#Events-eventList">destroyイベント</a>を発火しますモデルがコレクションに所有されている場合は自動的にコレクションからも削除されます
  1261. </p>
  1262. <h4>options</h4>
  1263. <p>
  1264. モデルはコレクションから即座に削除されますが<code>options.wait = true</code> を設定するとサーバの応答を待ってから削除するようにタイミングを変えることができます
  1265. </p>
  1266. <hr />
  1267. <!-- validate -->
  1268. <h3 id="Model-validate">model.validate(attributes)</h3>
  1269. <p>
  1270. モデルの属性を操作する直前に呼ばれるメソッドで値を検証する処理を記述します
  1271. </p>
  1272. <p>
  1273. このメソッドは検証に合格した場合には何も返却しないようにします検証結果に問題がある場合エラーメッセージの文字列やエラー情報を格納したオブジェクトなど好みの値を返却しますこの返却値は発火する<a href="#Events-eventList">errorイベント</a>の引数に設定されます
  1274. </p>
  1275. <pre>
  1276. var Model = Backbone.Model.extend({
  1277. validate: function (attrs) {
  1278. if (_.isEmpty(attrs.name)) {
  1279. return "Invalid!";
  1280. }
  1281. }
  1282. });
  1283. var model = new Model();
  1284. model.on("error", function (model, error) {
  1285. console.log(error);
  1286. });
  1287. model.set({name: ""}); //-> "Invalid!"
  1288. </pre>
  1289. <p>
  1290. 上の例では<a href="#Model-set">setメソッド</a>から呼ばれたvalidateメソッドがエラー時に発火する <a href="#Events-eventList">errorイベント</a>を捕捉していますが<a href="#Model-set">setメソッド</a> <code>options.error</code> にコールバックを定義してエラー処理する方法もありますなおその場合も <a href="#Events-eventList">errorイベント</a>は発火します
  1291. </p>
  1292. <pre>
  1293. var Model = Backbone.Model.extend({
  1294. validate: function (attrs) {
  1295. if (_.isEmpty(attrs.name)) {
  1296. return "Invalid!";
  1297. }
  1298. }
  1299. });
  1300. var model = new Model();
  1301. model.set({name: ""} , {
  1302. error: function (model, error) {
  1303. console.log(error);
  1304. }});
  1305. //-> "Invalid!"
  1306. </pre>
  1307. <hr />
  1308. <!-- url -->
  1309. <h3 id="Model-url">model.url()</h3>
  1310. <p>
  1311. モデルのURLを取得します
  1312. </p>
  1313. <p>
  1314. <a href="#Model-id">idプロパティ</a>が設定されているモデルのURLは <code>"[urlRoot]/id"</code> になります<a href="#Model-id">idプロパティ</a>が設定されていないつまり新規のリソースの場合は <code>"[urlRoot]"</code> になります<a href="#Model-urlRoot">urlRootプロパティ</a>が未定義の場合は例外がスローされますただしモデルがコレクションに所有されておりそのコレクションの<a href="#Collection-url">urlプロパティ</a>が定義されていれば<code>"[collection.url]/id"</code> または <code>"[collection.url]"</code> となりますモデルの<a href="#Model-urlRoot">urlRootプロパティ</a>とコレクションの<a href="#Collection-url">urlプロパティ</a>がどちらも定義されている場合はモデルの<a href="#Model-urlRoot">urlRootプロパティ</a>が優先されます
  1315. </p>
  1316. <pre>
  1317. var Model = Backbone.Model.extend();
  1318. var Collection = Backbone.Collection.extend({
  1319. url: "/users"
  1320. })
  1321. var model = new Model({id: 1});
  1322. var collection = new Collection(model);
  1323. console.log(model.url()); //-> "/users/1"
  1324. model.urlRoot = "/user";
  1325. console.log(model.url()); //-> "/user/1"
  1326. </pre>
  1327. <hr />
  1328. <!-- urlRoot -->
  1329. <h3 id="Model-urlRoot">model.urlRoot または model.urlRoot()</h3>
  1330. <p>
  1331. モデルの<a href="#Model-url">urlメソッド</a>の内部で使用されます関数として定義することも可能です
  1332. </p>
  1333. <pre>
  1334. var Model = Backbone.Model.extend({
  1335. urlRoot: function () {
  1336. return "/users";
  1337. }
  1338. });
  1339. var model = new Model({id: 1});
  1340. console.log(model.url()); //-> "/users/1"
  1341. </pre>
  1342. <hr />
  1343. <!-- parse -->
  1344. <h3 id="Model-parse">model.parse(response, xhr)</h3>
  1345. <p>
  1346. <a href="#Model-fetch">fetchメソッド</a><a href="#Model-save">saveメソッド</a>によりサーバから取得した値がモデルの属性へ設定される直前に呼ばれますサーバから取得したデータをそのまま属性に取り込むのではなく加工してから取り込みたい場合に利用します
  1347. </p>
  1348. <h4>response</h4>
  1349. <p>
  1350. サーバが返したデータです
  1351. </p>
  1352. <pre>
  1353. var Model = Backbone.Model.extend({
  1354. parse: function (response) {
  1355. return response.user;
  1356. }
  1357. });
  1358. var model = new Model();
  1359. model.fetch(); // サーバのレスポンスが {user: {name: "Tanaka"}} と仮定
  1360. </pre>
  1361. <p>
  1362. またモデルのインスタンス生成時にコンストラクタで <code>options.parse = true</code> を指定した場合にも実行されます
  1363. </p>
  1364. <hr />
  1365. <!-- clone -->
  1366. <h3 id="Model-clone">model.clone()</h3>
  1367. <p>
  1368. 属性が全て同じであるモデルを複製します
  1369. </p>
  1370. <hr />
  1371. <!-- isNew -->
  1372. <h3 id="Model-isNew">model.isNew()</h3>
  1373. <p>
  1374. モデルの<a href="#Model-id">idプロパティ</a>が未設定nullまたはundefinedかどうかを返します
  1375. </p>
  1376. <hr />
  1377. <!-- change -->
  1378. <h3 id="Model-change">model.change()</h3>
  1379. <p>
  1380. モデルの属性を <code>options.silent = true</code> で設定すると <a href="#Events-eventList">changeイベント</a>が発火しないまま属性が設定された状態となりますこのメソッドはその状態にある属性に <a href="#Events-eventList">changeイベント</a>を発火します
  1381. </p>
  1382. <pre>
  1383. var user = new Backbone.Model();
  1384. user.on("change:name", function (model, value) {
  1385. console.log(value); //-> "Tanaka"
  1386. })
  1387. user.on("change:country", function (model, value) {
  1388. console.log(value); //-> "Japan"
  1389. })
  1390. user.on("change", function (model) {
  1391. console.log(model.toJSON()); //-> {name: "Tanaka", country: "Japan"}
  1392. })
  1393. user.set({name: "Tanaka", country: "Japan"}, {silent: true});
  1394. user.change();
  1395. </pre>
  1396. <hr />
  1397. <!-- hasChanged -->
  1398. <h3 id="Model-hasChanged">model.hasChanged([attribute])</h3>
  1399. <p>
  1400. モデルの属性を <code>options.silent = true</code> で設定すると <a href="#Events-eventList">changeイベント</a>が発火しないまま属性が設定された状態となりますこのメソッドは指定した属性がその状態にあるかどうかを返します
  1401. </p>
  1402. <pre>
  1403. var model = new Backbone.Model();
  1404. model.set({name: "Suzuki"}, {silent: true});
  1405. console.log(model.hasChanged("name")); //-> true
  1406. model.set({name: "Tanaka"});
  1407. console.log(model.hasChanged("name")); //-> false
  1408. </pre>
  1409. <p>
  1410. なお発火しないまま残っている <a href="#Events-eventList">changeイベント</a><a href="#Model-change">changeメソッド</a>でまとめて発火できます
  1411. </P>
  1412. <h4>attribute</h4>
  1413. <p>
  1414. 対象の属性を指定します省略すると該当する属性が1つでもあればtrueを返します
  1415. </p>
  1416. <hr />
  1417. <!-- changedAttributes -->
  1418. <h3 id="Model-changedAttributes">model.changedAttributes([attributes])</h3>
  1419. <p>
  1420. モデルの属性を <code>options.silent = true</code> で設定すると <a href="#Events-eventList">changeイベント</a>が発火しないまま属性が設定された状態となりますこのメソッドはその状態にある全ての属性を複製したオブジェクトを返します該当する属性が無い場合はfalseを返します
  1421. </p>
  1422. <h4>attributes</h4>
  1423. <p>
  1424. 指定したattributesと最後に <a href="#Events-eventList">changeイベント</a>が発火した時点での属性とを比較して異なる属性を返します該当する属性が無い場合はfalseを返します
  1425. </p>
  1426. <pre>
  1427. var user = new Backbone.Model();
  1428. user.set({
  1429. name: "Tanaka",
  1430. address: "Japan"
  1431. });
  1432. user.set({name: "Suzuki"}, {silent:true});
  1433. console.log(user.changedAttributes({name: "Tanaka", address: "Japan"})); //-> false
  1434. console.log(user.changedAttributes({name: "Tanaka", address: "China"})); //-> {address: "china"}
  1435. console.log(user.changedAttributes({name: "Suzuki"})); //-> {name: "Suzuki"}
  1436. console.log(user.changedAttributes({name: "Yamada"})); //-> {name: "Yamada"}
  1437. </pre>
  1438. <hr />
  1439. <!-- previous -->
  1440. <h3 id="Model-previous">model.previous(attribute)</h3>
  1441. <p>
  1442. 変更前の属性を取得します<a href="#Events-eventList">changeイベント</a>にバインドしたコールバック関数の中でのみ使用できます
  1443. </p>
  1444. <pre>
  1445. var user = new Backbone.Model({name: "Tanaka"});
  1446. user.on("change", function (model) {
  1447. console.log(model.previous("name")); //-> "Tanaka"
  1448. console.log(model.get("name")); //-> "Suzuki"
  1449. })
  1450. user.set({name: "Suzuki"});
  1451. </pre>
  1452. <hr />
  1453. <!-- previousAttributes -->
  1454. <h3 id="Model-previousAttributes">model.previousAttributes()</h3>
  1455. <p>
  1456. 変更前の全ての属性を取得します<a href="#Events-eventList">changeイベント</a>にバインドしたコールバック関数の中でのみ使用できます
  1457. </p>
  1458. <pre>
  1459. var user = new Backbone.Model({name: "Tanaka", country: "Japan"});
  1460. user.on("change", function (model) {
  1461. console.log(model.previousAttributes()); //-> {name: "Tanaka", country: "Japan"}
  1462. console.log(model.toJSON()); //-> {name: "Suzuki", country: "China"}
  1463. })
  1464. user.set({name: "Suzuki", country: "China"});
  1465. </pre>
  1466. <hr />
  1467. <h2>Backbone.Collection</h2>
  1468. <hr />
  1469. <!-- extend -->
  1470. <h3 id="Collection-extend">Backbone.Collection.extend([properties], [classProperties])</h3>
  1471. <p>
  1472. <code>Backbone.Collection</code> を継承した新しいコレクションを作ります
  1473. </p>
  1474. <h4>properties</h4>
  1475. <p>
  1476. インスタンスメンバを定義します
  1477. </p>
  1478. <h4>classProperties</h4>
  1479. <p>
  1480. 静的メンバを定義します
  1481. </p>
  1482. <hr />
  1483. <!-- constractor -->
  1484. <h3 id="Collection-constractor">new Collection([models], [options])</h3>
  1485. <p>
  1486. コンストラクタです
  1487. </p>
  1488. <h4>models</h4>
  1489. <p>
  1490. コレクションに格納するモデルを指定します複数のモデルは配列で指定します
  1491. </p>
  1492. <pre>
  1493. var User = Backbone.Model.extend();
  1494. var user1 = new User({name: "Tanaka"});
  1495. var user2 = new User({name: "Suzuki"});
  1496. var us

Large files files are truncated, but you can click here to view the full file