我一直在使用基本的Durandal HTML模板,但我已经用Zurb Foundation替换了Bootstrap.一切都运作良好,除了我无法打开任何模态,下拉或任何需要基础初始化的问题.通常会将以下内容放在您网页的正文中以执行此操作:
<script>
  $(document).foundation();
</script>

我试图将它放在Index.html,Shell.html中,甚至在viewmodel和view中随机放置.此外,我尝试在main.js中从JS启动它,并在activate部分中使用viewmodel本身.这些都没有奏效.我发现的(希望是非常临时的)解决方法是实际初始化我的javascript基础,当单击按钮打开模态时:

$(document).foundation();
$("#myModal").foundation("reveal","open");

我哪里错了?

我的main.js供参考:

(function() {
  requirejs.config({
    paths: {
      text: "../lib/require/text",durandal: "../lib/durandal/js",plugins: "../lib/durandal/js/plugins",transitions: "../lib/durandal/js/transitions",knockout: "../lib/knockout/knockout-2.3.0",jquery: "../lib/jquery/jquery-1.9.1",foundation: "../lib/foundation/js/foundation/foundation","foundation.abide": "../lib/foundation/js/foundation/foundation.abide","foundation.accordion": "../lib/foundation/js/foundation/foundation.accordion","foundation.alert": "../lib/foundation/js/foundation/foundation.alert","foundation.clearing": "../lib/foundation/js/foundation/foundation.clearing","foundation.dropdown": "../lib/foundation/js/foundation/foundation.dropdown","foundation.interchange": "../lib/foundation/js/foundation/foundation.interchange","foundation.joyride": "../lib/foundation/js/foundation/foundation.joyride","foundation.magellan": "../lib/foundation/js/foundation/foundation.magellan","foundation.offcanvas": "../lib/foundation/js/foundation/foundation.offcanvas","foundation.orbit": "../lib/foundation/js/foundation/foundation.orbit","foundation.reveal": "../lib/foundation/js/foundation/foundation.reveal","foundation.tab": "../lib/foundation/js/foundation/foundation.tab","foundation.tooltip": "../lib/foundation/js/foundation/foundation.tooltip","foundation.topbar": "../lib/foundation/js/foundation/foundation.topbar"
    },shim: {
      jquery: {
        exports: "jQuery"
      },foundation: {
        deps: ["jquery"]
      },"foundation.abide": {
        deps: ["foundation"]
      },"foundation.accordion": {
        deps: ["foundation"]
      },"foundation.alert": {
        deps: ["foundation"]
      },"foundation.clearing": {
        deps: ["foundation"]
      },"foundation.dropdown": {
        deps: ["foundation"]
      },"foundation.interchange": {
        deps: ["foundation"]
      },"foundation.joyride": {
        deps: ["foundation"]
      },"foundation.magellan": {
        deps: ["foundation"]
      },"foundation.offcanvas": {
        deps: ["foundation"]
      },"foundation.orbit": {
        deps: ["foundation"]
      },"foundation.reveal": {
        deps: ["foundation"]
      },"foundation.tab": {
        deps: ["foundation"]
      },"foundation.tooltip": {
        deps: ["foundation"]
      },"foundation.topbar": {
        deps: ["foundation"]
      }
    }
  });

  define(["durandal/system","durandal/app","durandal/viewLocator","foundation"],function(system,app,viewLocator,foundation) {
    system.debug(true);
    app.title = "Durandal Starter Kit";
    app.configurePlugins({
      router: true,dialog: true,widget: true
    });
    app.start().then(function() {
      viewLocator.useConvention();
      app.setRoot("viewmodels/shell","entrance");
    });
  });

}).call(this);

shell.html:

<div>
    <nav class="top-bar hide-for-small">
        <ul class="title-area">
            <!-- Title Area -->
            <li class="name">
                <h4 style="color: white">KRS Template</h4>
            </li>
            <!-- Remove the class "menu-icon" to get rid of menu icon. Take out "Menu" to just have icon alone -->
            <li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li>
        </ul>
        <div class="top-bar-section">
            <!-- Right Nav Section -->
            <ul class="right" data-bind="foreach: router.navigationModel">
                <li data-bind="css: { active: isActive }">
                    <a data-bind="attr: { href: hash },html: title"></a>
                </li>
            </ul>
        </div>
    </nav>
    <div class="container-fluid page-host" data-bind="router: { transition: 'entrance',cacheViews: true }"></div>
</div>

shell.js:

(function() {

  define(["plugins/router",function(router,foundation) {
    return {
      router: router,activate: function() {
        router.map([
          {
            route: "",title: "Welcome",moduleId: "viewmodels/welcome",nav: true
          },{
            route: "List",moduleId: "viewmodels/listofItems",nav: true
          }
        ]).buildNavigationModel();
        return router.activate();
      }
    };
  });

}).call(this);

实际问题在于:listofItems.html:

<section>
    <div>
        <h2 data-bind="text: displayName" style="text-align: center"></h2>
        <div class="row">
            <div class="small-12 column">
                <div data-bind="foreach: items">
                    <div class="panel">
                        <div class="row">
                            <div class="small-6 column">
                                <b>Number: <span data-bind="text: NumberA"></span></b>
                                <br />
                                <b>Number B: <span data-bind="text: NumberB"></span></b>
                                <br />

                            </div>
                            <div class="small-6 column">
                                <b>Text A: <span data-bind="text: StringA"></span></b>
                                <br />
                                <b>Text B: <span data-bind="text: StringB"></span></b>
                                <br />
                                <b>Text C: <span data-bind="text: StringC"></span></b>
                                <br />
                            </div>
                            <div class="row">
                                <div class="small-12 column">
                                    <a class="button" data-bind="click: function () { $parent.openModal(this); }">Open Modal</a>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div id="myModal" class="reveal-modal" data-reveal>
            <h2>Edit Item</h2>
            <p class="lead">Please alter the item</p>
            <input id="Stepper" type="number" data-bind="value: ModalNumberA" />
            <input id="Number1" type="number" data-bind="value: ModalNumberB" />
            <input type="text" placeholder="Scope name" data-bind="value: ModalStringA" />
            <input type="text" placeholder="Scope name" data-bind="value: ModalStringB" />
            <input type="text" placeholder="Scope name" data-bind="value: ModalStringC" />
            <a class="small button" data-bind="click: saveModalChanges">Save</a>
            <a class="small button" data-bind="click: closeModal">Close</a>
            <a class="close-reveal-modal">&#215;</a>
        </div>
    </div>
</section>

listofItems.js(从CoffeeScript生成):

(function() {
  var _this = this;

  define(["durandal/app","knockout","krs","jquery","foundation.reveal","foundation.dropdown"],function(app,ko,krs,$,reveal,dropdown) {
    return {
      displayName: "List of Items",items: ko.observableArray([]),result: ko.observable(),ModalNumberA: ko.observable(),ModalNumberB: ko.observable(),ModalStringA: ko.observable(),ModalStringB: ko.observable(),ModalStringC: ko.observable(),ItemBeingEdited: ko.observable(),activate: function() {
        var _this = this;
        return callTheWebApi("http://localhost:54129/api/mocked/GetMockedviewmodelList","GET","",function(result) {
          console.log(result);
          _this.items(result);
        });
      },openModal: function(item) {
        this.ItemBeingEdited(item);
        this.ModalNumberA(item.NumberA);
        this.ModalNumberB(item.NumberB);
        this.ModalStringA(item.StringA);
        this.ModalStringB(item.StringB);
        this.ModalStringC(item.StringC);
        $(document).foundation();
        return $("#myModal").foundation("reveal","open");
      },saveModalChanges: function() {
        var itemBeingEdited,_this = this;
        itemBeingEdited = new Object();
        itemBeingEdited.NumberA = this.ModalNumberA();
        itemBeingEdited.NumberB = this.ModalNumberB();
        itemBeingEdited.StringA = this.ModalStringA();
        itemBeingEdited.StringB = this.ModalStringB();
        itemBeingEdited.StringC = this.ModalStringC();
        return callTheWebApi("http://localhost:54129/api/mocked/SaveMockedviewmodel","{'model':" + JSON.stringify(itemBeingEdited) + "}",function(success) {
          var templist;
          if (success) {
            _this.items()[_this.items().indexOf(_this.ItemBeingEdited())] = itemBeingEdited;
            templist = _this.items();
            _this.items(null);
            _this.items(templist);
            return $("#myModal").foundation("reveal","close");
          }
        });
      },closeModal: function() {
        return $("#myModal").foundation("reveal","close");
      }
    };
  });

}).call(this);

如果有人能够指出我哪里出错了,我会非常感激.

解决方法

当Foundation在下面的块中初始化时,它需要所有绑定方法的对象,以便在DOM中使用模态,下拉等.这意味着您可以执行以下操作以确保存在大多数基础功能.

初始化代码

$(document).foundation();

给它一些KISS并保持简单,你可以将它添加到附件或compositionComplete回调中的每个’viewmodel’,如here所列.这将确保在初始化Foundation时所有元素都在DOM中.

define(function(require){
  var backend = require('backend');

  return {
    customers:ko.observableArray([]),activate:function(){
       // This runs as soon as the viewmodel is loaded
    }
    attached:function(){
       // This runs as soon as the view is full rendered
       $(document).foundation();
    }
  };
});

另外,我使用微模板进行模态化(在基础初始化期间通常不在DOM中),我发现的一个技巧是初始化对象本身的基础.

$('#dynamicElement').foundation();

这适用于使用数据属性(如模态)的事物,并允许您针对这些对象运行Foundation方法.

关于KnockOut.js的基金会在其他答案中提及.我已经调查了这个,因为我爱基金会和KnockOut是我的面包和黄油,但两者只是不能很好地一起工作.最后你要重写所有的基金会与KO一起工作,而且我个人没有时间做这件事,但很想看到它发生.

如果你真的需要响应式设计和基础融入Durandal的所有铃声和口哨,你真的需要使用Bootstrap,因为它以兼容的方式提供这些功能.

requirejs – Durandal和Zurb基金会,我应该在哪里初始化基础?的更多相关文章

  1. html5 拖拽及用 js 实现拖拽功能的示例代码

    这篇文章主要介绍了html5 拖拽及用 js 实现拖拽,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. amaze ui 的使用详细教程

    这篇文章主要介绍了amaze ui 的使用详细教程,本文通过多种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. HTML5适合的情人节礼物有纪念日期功能

    这篇文章主要介绍了HTML5适合的情人节礼物有纪念日期功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. three.js模拟实现太阳系行星体系功能

    这篇文章主要介绍了three.js模拟实现太阳系行星体系功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  5. HTML5页面无缝闪开的问题及解决方案

    这篇文章主要介绍了HTML5页面无缝闪开方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. ios – UIColor到十六进制(网页颜色)

    有没有简单的方法将UIColor转换为十六进制值?

  7. ios – 如果我将自动释放的对象桥接到Core Foundation,我必须使用__bridge或__bridge_retained吗?

    ARC迁移工具遇到了这个问题:特别是,它不确定它是否应该执行__bridge或__bridge_retained.而我也是.-fileURLWithPath返回一个自动释放的对象,在这个地方我不是fileURL的所有者.但与此同时,该对象的保留计数至少为1.我敢打赌,这只能用__bridge来完成.解决方法您只想为此使用常规__bridge强制转换.仅当您想要管理强制转换CF对象的生命周期时,才会使用__bridge_retained.例如:所以__bridge_retained确实告诉编译器你有一个AR

  8. ios – 为什么,将nil作为参数从Objc C发送到swift类初始化器,用新对象替换nil参数

    除非属性本身被声明为nonnull:

  9. ios – 在Swift中对MKCircle进行子类化

    我想通过添加另一个String属性来继承MKCircle,我们称之为“代码”.这个属性不是可选的和常量的,所以我必须从初始化器设置它,对吧?有没有办法定义一个单一的便利初始化器,在这种情况下需要3个参数?本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  10. ios – AVAudioPlayer不再使用Swift 2.0/Xcode 7 beta

    对于我的iPhone应用程序中的vartestAudio声明,我在这里收到错误“调用可以抛出,但错误不能从属性初始化程序中抛出”当我转到Xcode7测试版时,就发生了这种情况.如何在Swift2.0中使用此音频剪辑?

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部