Javascript SammyJSON商店演示-如何创建模态产品弹出窗口?

Javascript SammyJSON商店演示-如何创建模态产品弹出窗口?,javascript,fancybox,modal-dialog,sammy.js,Javascript,Fancybox,Modal Dialog,Sammy.js,有没有人举过一个例子,让SammyJSON商店演示的产品细节显示在一个模式插件中,比如 下面是json存储区的代码块——我需要做什么才能在模型中展示它 该模板文件中的代码如下所示: <div class="item-detail"> <div class="item-image"><img src="<%= item.large_image %>" alt="<%= item.title %>" /></div>

有没有人举过一个例子,让SammyJSON商店演示的产品细节显示在一个模式插件中,比如

下面是json存储区的代码块——我需要做什么才能在模型中展示它


该模板文件中的代码如下所示:

<div class="item-detail">
    <div class="item-image"><img src="<%= item.large_image %>" alt="<%= item.title %>" /></div>
    <div class="item-info">
        <div class="item-artist"><%= item.artist %></div>
        <div class="item-title"><%= item.title %></div>
        <div class="item-price">$<%= item.price %></div>
        <div class="item-link"><a href="<%= item.url %>">Buy this item on Amazon</a></div>
        <div class="back-link"><a href="#/">&laquo; Back to Items</a></div>
    </div>
</div>

这应该可以解决问题。

您可能想使用Sammy的方法:

编辑 正如@drozzy所指出的,使用这种方法,位置栏仍然会改变。为了解决这个问题,我们需要截取点击链接打开弹出窗口并明确启动Sammy的路线:

$(document).delegate("a[href^=#/item/]", "click", function(linkElement) {

  // Determine and explicitly start Sammy's route for the clicked link
  var path = linkElement.currentTarget.href.replace(/^[^#]*/, "");
  Sammy('#main').runRoute('get', path);

  // cancel the default behaviour
  return false;
});
请注意,此示例使用一个选择器,将链接与以
#/item/
开头的路由匹配。如果这不够具体,则可能需要更合适的方法,例如标记类


(这使用了jQuery 1.4.3,就像JSON商店演示中使用的一样。)

我也有同样的问题:但我认为你的问题更具体。事实上,我会给它一笔赏金。这难道不是作为字符串传递
内容吗?我很确定您不需要在它周围加上单引号,因此您可以插入
render
方法返回的完整HTML。有趣的解决方案!但是,这是否会将url更改为“/item/blah”-然后即使用户关闭了模式窗口也保持这样?如果能有类似亚马逊图书预览版的东西(你可以在这里滚动浏览图书,而且url不会改变),那就太好了@drozzy:事实上,我没有想到位置栏。由于Sammy在位置栏更改时触发其路由,因此必须防止默认行为并显式启动路由。我会更新我的答案以包括这个案例。伙计,这太酷了!我喜欢点击的截取,可惜Sammy不能在本地截取。。。你是否经常使用Sammy.js,或者你只是想知道答案?还有,什么是marker类?+1-我真的很想得到这笔赏金,但你的答案很好。感谢@drozzy将积分抛在脑后。
var $link = $('div.item-link a');
$link.fancybox({href:$link.attr('href')});
this.get('#/item/:id', function(context) {
  this.item = this.items[this.params['id']];
  if (!this.item) { return this.notFound(); }
  this.render('templates/item_detail.template').then(function(content) {
    $.fancybox({
        content: content,
        // set box size to fit the product details
        autoDimensions: false,
        width: 800,
        height: 500
    });
  });
});
$(document).delegate("a[href^=#/item/]", "click", function(linkElement) {

  // Determine and explicitly start Sammy's route for the clicked link
  var path = linkElement.currentTarget.href.replace(/^[^#]*/, "");
  Sammy('#main').runRoute('get', path);

  // cancel the default behaviour
  return false;
});