`
sunxboy
  • 浏览: 2878091 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

使用define 或者 require 加载knockout.mapping 时找不到fromJS问题解决

 
阅读更多

问题:

define(['knockout', 'knockout.mapping'], function(ko, mapping) {
}

 当使用ko.mapping.fromJS/时总是报fromjS无效方法。

原因是:

It sounds like Script# is assuming that ko and ko.mapping are in the global namespace, not loaded as AMD. BUT, Knockout and Knockout.mapping are coded such that when they detect AMD/RequireJS, they do not use the global namespace.

大概是说ko和ko.mapping在模块化加载时在同一全局命名空间里,这样会导致ko.mapping不能正确从“ko.mapping”模块引用。

 

解决方法:

require(["knockout", "knockout.mapping"], function (ko, m) {       
    ko.mapping = m; 
})

 

或者

在上个例子中直接使用 m 作为 “ko.mapping", 如: m.fromJS(...)

 

还有一个解决办法:

- create your own wrapper module to inject it back into global. Something like this:

define('knockout.inject', ['knockout'], function(k)
{
  window.ko = k; // make a ko global
  return k; // but also return what a normal AMD require expects
});

define('knockout.mapping.inject', ['knockout.mapping'], function(m)
{
  window.ko.mapping = m; // make a ko.mapping global
  return m; // but also return what a normal AMD require expects
});

THEN, you can make a RequireJS map configuration so that whenever you request 'knockout' or 'knockout.mapping', they get transparently remapped to your above wrappers.

requirejs.config({
    paths: { // same as original },
    shim: { // same as original },
    map: {
      '*': {
        'knockout': 'knockout.inject',
        'knockout.mapping': 'knockout.mapping.inject'
      },
      // prevent cycles
      'knockout.inject': {'knockout': 'knockout'},
      'knockout.mapping.inject': {'knockout.mapping': 'knockout.mapping'}
    }
});

 

分享到:
评论

相关推荐

    require.js.rar

    require.js的出现,为解决这一问题提供了强大的解决方案。require.js是一个小巧但功能强大的JavaScript模块加载器,它遵循了Asynchronous Module Definition(AMD)规范,使得在浏览器端进行异步加载和组织模块成为...

    require+r.js打包

    AMD是为了解决JavaScript在浏览器环境中的异步加载问题而设计的,它允许模块和依赖关系可以并行加载,提高页面的加载速度。Require.js提供了一个方便的API来定义和引用模块,使得代码结构更加清晰,便于维护。 1. ...

    require.js插件-text.js使用

    RequireJS的核心在于它的异步加载能力,通过define函数定义模块,并使用require函数来获取和执行这些模块。然而,当我们需要动态加载HTML模板、JSON数据或者其他文本资源时,直接使用require是无法完成的,这时候就...

    微信小程序require 引用 BASE64.JS 失败问题的分析解决

    有朋友问, 微信小程序require ('base64.js')文件时,会失败,,, # 分析 事实上,微信小程序require很多JS模块都有不兼容现象。。。先从base64.js这个模块入手吧。 调试出错点: ~~~~ (function(global) {  'use ...

    DEFINE_DPM_EROSION.rar_DEFINE DPM EROSION_DPM_UDF EROSION_fluent

    Fluent 是一款广泛使用的计算流体动力学(CFD)软件,它允许用户通过编写 UDF 来扩展其内置功能,以解决特定的物理问题。 在描述中提到的 "DEFINE_DPM_EROSION" 是一个特定的 UDF,它是针对 Fluent 的,用于处理...

    require.js最新版2.3.5

    总之,RequireJS 2.3.5版本是一个强大的JavaScript模块管理库,它通过AMD规范实现了异步加载,解决了前端项目中的依赖管理问题,同时与模板引擎的结合使用,进一步提升了开发效率和用户体验。通过合理利用RequireJS...

    前端项目-require-cs.zip

    Require-CS插件就是将RequireJS的功能扩展到CoffeeScript上,使得开发者可以使用AMD的方式来组织和加载CoffeeScript代码。这在大型前端项目中尤其有用,因为它可以确保代码按照正确的顺序执行,同时避免了全局变量...

    iview搭建项目中引入define.js后编译.docx

    ### iView项目中引入define.js后的编译流程详解 在前端开发过程中,为了更好地管理和配置项目的不同环境(如开发环境、测试环境与生产环境),通常会采用不同的配置文件来适应这些环境的需求。本文将详细介绍在...

    PyPI 官网下载 | define-1.47.tar.gz

    在实际使用"define"库之前,开发者需要解压文件,然后使用Python的`setup.py`脚本安装,或者通过pip工具直接从PyPI安装。对于ZooKeeper相关的功能,库可能提供了与ZooKeeper交互的API,使Python开发者能够轻松地在...

    Define_Grid_Motion.zip_DEFINE_GRID_MOTION_fluent udf_fluent变形_f

    在处理复杂边界条件或非线性问题时,`Define Grid Motion`结合UDF的使用可以极大地提高模拟的灵活性和准确性。例如,在涡轮机械、气动弹性力学、生物流体动力学等领域,这种技术被广泛应用于模拟叶片的旋转、物体...

    javascript模块化编程库require的用法.docx

    最新版本的Require.js仅14KB大小,可以在不影响页面加载速度的情况下,为项目带来强大的模块化支持。 #### Require.js的优势 - **模块化管理**:通过定义独立的模块,可以方便地组织和重用代码。 - **异步加载**:...

    require.js中的define函数详解

    `require.js` 是一个流行的JavaScript模块化加载器,它的核心功能是帮助管理和组织JavaScript代码,使其更容易维护和按需加载。在`require.js`中,`define`函数是定义模块的关键,它允许开发者声明模块的依赖,并...

    knockout-amd-helpers

    总结来说,knockout-amd-helpers是Knockout.js和AMD模式结合的利器,它简化了模块管理和组件加载的过程,使得开发者能够更专注于业务逻辑,同时享受到模块化带来的好处。通过合理地利用knockout-amd-helpers,我们...

    eslint-define-config:为.eslintrc.js文件提供defineConfig函数

    eslint-define-config ... const { defineConfig } = require ( 'eslint-define-config' ) ; module . exports = defineConfig ( { root : true , rules : { // rules... } } ) ; 为什么? 通过以下方

    前端模块加载解决方案modJS.zip

    考虑到有些模块无需在启动时载入,因此modJS提供了可以在运行时异步加载模块的接口:require.async (names, onload, onerror)names可以是一个模块名,或者是数组形式的模块名列表。当所有都加载都完成时,onload被...

    Javascript模块化编程(Require.js)

    压缩包中的"AjaxQ-master"可能是一个使用Require.js实现的Ajax队列库,用于处理多个Ajax请求,确保它们按照特定顺序执行,或者以某种策略(如并发限制)进行管理。这种库在处理数据获取或更新时特别有用,可以避免...

    require.js的用法详解

    require.js是一种JavaScript模块加载器,设计用于解决JavaScript代码的组织和异步加载问题。在早期的网页开发中,所有的JavaScript代码通常被编写在一个文件里,随着项目规模的扩大,代码量增加,这种方法不再适用。...

    require.js

    require.js的核心理念是基于AMD(Asynchronous Module Definition)规范,这个规范允许异步加载和定义JavaScript模块,从而解决了浏览器端JavaScript代码的依赖管理问题。 在传统的JavaScript开发中,如果一个脚本...

    javascript高级模块化require.js的具体使用方法

    在使用Require.js时,首先需要定义模块,使用define函数,其中可以定义依赖和模块的内容。例如,定义一个模块index.js可以这样写: ```javascript define(function() { console.log("this is a test!"); function...

    define的用法和例句.pdf

    例如,在C/C++中,`#define`用于创建宏定义,这可以简化代码、提高效率,但如果不小心使用,也可能引入潜在的错误和不一致性。例如,`#define MAX_SIZE 100`定义了一个名为`MAX_SIZE`的宏,表示数组的最大容量。 在...

Global site tag (gtag.js) - Google Analytics