主干逆视图

kik*_*ito 4 javascript backbone.js backbone-views

骨干新手在这里.我想开始在web应用程序上使用backbone(后端是Ruby on Rails),到目前为止它只有很少的客户端功能(一些用于执行slideToggles的jquery,以及一些ajax调用).

我面临的一个问题是Backbone似乎是为了加载你的javascript,然后让它请求数据(通常是JSON)到服务器,然后它呈现视图.在我的情况下这是不可接受的.我想把html源于服务器,将它呈现给用户,然后使用那个html填充我的模型(之后,我对从服务器请求JSON内容的模型很好).

我猜我需要的是某种"逆视图".给出这个html的东西:

<ul class="people">
  <li><span class="name">Peter</span></li>
  <li><span class="name">John</span></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

People Collection和具有name属性的Person模型可以解析Peter和John(可能使用View).

这是存在的东西吗?我是以错误的方式接近整个事情吗?

jev*_*lio 5

可以附加Backbone.View到服务器上预先呈现的HTML页面.我已经在这个SO答案中更详细地描述了这一点.当页面需要被搜索引擎抓取时,这是一种非常常见的情况.

但是,我建议您不要通过解析服务器呈现的HTML来初始化模型状态.我建议你改为将初始模型数据作为JSON 引导到服务页面.就像是:

<body>
      <!-- your server-side template code here -->
      <script>
        window.bootstrap = {
          people: <%= @people.to_json %>
        };
      </script>
</body>
Run Code Online (Sandbox Code Playgroud)

初始化集合时,只需从引导数据初始化它们并丢弃引导的集合:

var bootstrap = window.bootstrap || {};
var peopleCollection = new PeopleCollection(bootstrap.people);
delete window.bootstrap;
Run Code Online (Sandbox Code Playgroud)

只需确保您的服务器端呈现引擎使用与引导相同的数据,因此您可以保证呈现的页面和初始模型数据同步.

或者,重新考虑像Backbone这样的框架是否适合您的需求.你说你的应用程序有很少的(javascript)功能.你需要Backbone吗?这是一个很棒的框架,但你想要的是工作的正确工具™.