声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版。

引入第三方颜色选择器

在 FineUIMvc 中使用第三方 JavaScript 遵循一定的约定,也非常简单。

下面以官网示例为例:http://fineui.com/demo_mvc/#/demo_mvc/ThirdParty/ColorPicker

这个例子引入了第三方的颜色选择器,配合 FineUIMvc 的 TextBox 控件一起使用。

我们来看下本页面的视图定义:

@{
ViewBag.Title = "ThirdParty/ColorPicker";
var F = @Html.F();
}
@section head {
<link rel="stylesheet" href="~/third-party/res/spectrum/spectrum.css" />
<style>
.mycolor .f-field-body {
display: inline-block !important;
width: 150px;
margin-right: 5px;
} .mycolor .sp-replacer {
border-width: 0;
padding: 0;
position: absolute;
top: 50%;
margin-top: -10px;
} .mycolor .sp-dd {
display: none;
} .mycolor .sp-preview {
margin-right: 0;
}
</style>
} @section body { @(F.SimpleForm()
.ID("SimpleForm1")
.BodyPadding(5)
.Width(450)
.EnableCollapse(true)
.ShowBorder(true)
.Title("表单")
.ShowHeader(true)
.Items(
F.DatePicker()
.Required(true)
.Label("日期一")
.EmptyText("请选择日期一")
.ID("DatePicker1")
.ShowRedStar(true),
F.TextBox()
.ID("tbxMyBox")
.CssClass("mycolor")
.Text("#f90")
.Required(true)
.ShowRedStar(true)
.Label("选择颜色"),
F.Button()
.ID("btnSubmit")
.ValidateForms("SimpleForm1")
.Text("提交表单")
.OnClick(Url.Action("btnSubmit_Click"),
new Parameter("dateValue", "F.ui.DatePicker1.getText()"),
new Parameter("textValue", "F.ui.tbxMyBox.getValue()"))
)
) } @section script {
<script src="~/third-party/res/spectrum/spectrum.js" type="text/javascript"></script>
<script src="~/third-party/res/spectrum/i18n/jquery.spectrum-zh-cn.js" type="text/javascript"></script>
<script>
F.ready(function () {
var tbxMyBox = F.ui.tbxMyBox; tbxMyBox.bodyEl.spectrum({
preferredFormat: "hex3",
showInput: true,
showPalette: true,
palette: [
["#000", "#444", "#666", "#999", "#ccc", "#eee", "#f3f3f3", "#fff"],
["#f00", "#f90", "#ff0", "#0f0", "#0ff", "#00f", "#90f", "#f0f"],
["#f4cccc", "#fce5cd", "#fff2cc", "#d9ead3", "#d0e0e3", "#cfe2f3", "#d9d2e9", "#ead1dc"],
["#ea9999", "#f9cb9c", "#ffe599", "#b6d7a8", "#a2c4c9", "#9fc5e8", "#b4a7d6", "#d5a6bd"],
["#e06666", "#f6b26b", "#ffd966", "#93c47d", "#76a5af", "#6fa8dc", "#8e7cc3", "#c27ba0"],
["#c00", "#e69138", "#f1c232", "#6aa84f", "#45818e", "#3d85c6", "#674ea7", "#a64d79"],
["#900", "#b45f06", "#bf9000", "#38761d", "#134f5c", "#0b5394", "#351c75", "#741b47"],
["#600", "#783f04", "#7f6000", "#274e13", "#0c343d", "#073763", "#20124d", "#4c1130"]
]
});
});
</script>
}

整体上讲分为三大部分:

1. @section head:所有的 CSS 定义都放在这里面,包含第三方的 CSS 文件引用。

2. @section body:正文部分

3. @section script:脚本区域,放置第三方脚本引用和初始化脚本。

下面看下页面的初始化脚本:

F.ready(function () {
var tbxMyBox = F.ui.tbxMyBox; tbxMyBox.bodyEl.spectrum({
......
});
});

1. F.ready 类似于 jQuery 的 $.ready 函数,在页面上所有的控件初始化完毕之后触发。

2. F.ui.tbxMyBox 用来获取页面上 id=tbxMyBox 的控件实例,在 FineUIMvc 的客户端脚本中,你可以通过这种方式获取所有的控件实例。如果你之前用过FineUI(开源版),知道还有另一种获取控件实例的方式:F('tbxMyBox'),为了兼容之前的代码,这种方式依然支持。

3. tbxMyBox.bodyEl 表示的是文本输入框的 input 标签,是一个 jQuery 对象。通过浏览器的调试工具,我们很容易的观察 bodyEl 所指向的元素:

常见错误

一个看似简单的任务,但是如果不了解其中的原理,也会经常出错,下面就列出网友经常犯错的地方。

重复引入jQuery库

错误代码:

@section script {
<script src="~/res/jquery.js" type="text/javascript"></script>
<script src="~/third-party/res/spectrum/spectrum.js" type="text/javascript"></script>
<script src="~/third-party/res/spectrum/i18n/jquery.spectrum-zh-cn.js" type="text/javascript"></script>
<script> ...
</script>
}

因为 FineUIMvc 的客户端库里已经引入了 jQuery,因此无需再引入 jQuery 库,重复引入 jQuery 会出现各种问题。

因此上面的代码要把  <script src="~/res/jquery.js" type="text/javascript"></script> 这一行删掉。

JavaScript引用位置错误

错误代码:

@section head {
<link rel="stylesheet" href="~/third-party/res/spectrum/spectrum.css" /> <script src="~/third-party/res/spectrum/spectrum.js" type="text/javascript"></script>
<script src="~/third-party/res/spectrum/i18n/jquery.spectrum-zh-cn.js" type="text/javascript"></script>
<script>
...
</script>
}

这是另外一个常见的错误,将 JavaScript 代码放入 head 节中。之所以这样做是错误的,还要看布局视图的定义(_Layout.cshtml):

<!DOCTYPE html>
<html>
<head>
@F.RenderCss() @RenderSection("head", false)
</head>
<body>
@Html.AntiForgeryToken() @F.PageManager @RenderSection("body", true) @F.RenderScript()
@RenderSection("script", false)
</body>
</html>

这是一个简化的布局视图,注意其中我们放置的顺序,@F.RenderScript() 用来渲染 FineUIMvc 所需要的 JavaScript 引用,所以第三方和自定义 JavaScript 引用都要放到这个的后面,也就是 script 节中(当然,如果你调整了布局视图的定义,就另当别论了)。

$.ready 还是 F.ready

错误代码:

@section script {
<script src="~/third-party/res/spectrum/spectrum.js" type="text/javascript"></script>
<script src="~/third-party/res/spectrum/i18n/jquery.spectrum-zh-cn.js" type="text/javascript"></script>
<script>
$.ready(function () {
var tbxMyBox = F.ui.tbxMyBox; tbxMyBox.bodyEl.spectrum({
...
});
});
</script>
}

这个错误也会经常出现,很多网友认为 DOMReady 时($.ready)应该就可以写初始化代码了。其实不然,因为你的初始化代码中包含对 FineUIMvc 控件的引用(F.ui.tbxMyBox),而在 DOMReady 时这些控件还没有初始化。

记着一点:自定义初始化脚本放到 F.ready() 里面。

小结

本篇文章讲解了如何引入第三方 JavaScript 库到 FineUIMvc 主导的页面中,这个过程遵循一定的规则,简单明了。同时也分析了网友常见的错误,它们分别是重复引入 jQuery 库,JavaScript 放置的位置不对,以及自定义脚本放到了 DOMReady 里面。

《FineUIMvc随笔》目录:http://www.cnblogs.com/sanshi/p/6473592.html

如何在 FineUIMvc 中引用第三方 JavaScript 库的更多相关文章

  1. 如何在Ionic2项目中使用第三方JavaScript库

    onic的官网放出一记大招Ionic and Typings,来介绍如何在Ionic2项目中使用第三方JavaScript库. 因为在前阵子正好想用一个非常有名的第三方JS库ChartJs来实现一些东 ...

  2. 如何在TypeScript中使用第三方JavaScript框架

    一.安装typings 使用npm全局安装typings :npm install -g typings 安装成功. 二,搜索资源,支持模糊搜索:typings search base64 三.安装t ...

  3. 如何在eclipse中引用第三方jar包

    在用UiAutomator做手机自动化测试过程中,在UiAutomator的基础之上进一步封装了里边的方法,以使case开发更顺手.直接在工程的根目录下新建了个libs的文件夹,把封装好的框架打成ja ...

  4. VC中引用第三方库,常见的库冲突问题

    Q:VC中引用第三方库,常见的库冲突问题 环境:[1]VS2008 [2]WinXP SP3 A1(方法一): [S1]第三方库(Binary形式的)如果同主程序冲突,则下载第三方库的源码[S2]保持 ...

  5. CocoaPods:管理Objective-c 程序中各种第三方开源库关联

    在我们的iOS程序中,经常会用到多个第三方的开源库,通常做法是去下载最新版本的开源库,然后拖拽到工程中. 但是,第三方开源库的数量一旦比较多,版本的管理就非常的麻烦.有没有什么办法可以简化对第三方库的 ...

  6. (转)CocoaPods:管理Objective-c 程序中各种第三方开源库关联

    在我们的iOS程序中,经常会用到多个第三方的开源库,通常做法是去下载最新版本的开源库,然后拖拽到工程中. 但是,第三方开源库的数量一旦比较多,版本的管理就非常的麻烦.有没有什么办法可以简化对第三方库的 ...

  7. 在 Ionic2 TypeScript 项目中导入第三方 JS 库

    原文发表于我的技术博客 本文分享了在Ionic2 TypeScript 项目中导入第三方 JS 库的方法,供参考. 原文发表于我的技术博客 1. Typings 的方式 因在 TypeScript 中 ...

  8. Vue引入第三方JavaScript库和如何创建自己的Vue插件

    一 第三方JavaScript库 前言 .vue文件 中不解析 script标签引入js文件,只能用 import 引入 有两种用法: 1.import a from '../a' 2.import ...

  9. webpack4 系列教程(十二):处理第三方JavaScript库

    教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十二):处理第三方 JavaScript 库>原文地址.或者来我的小站看更多内容:godbm ...

随机推荐

  1. mfc---ActiveX控件

    AvtiveX控件可看做是一个极小的服务器应用程序,不能独立运行,必须嵌入到某个容器程序中 容器应用程序:可以嵌入或链接对象的应用程序 服务器应用程序:创建对象并且当对象被双击时,可以被启动的应用程序 ...

  2. JS中的this 指向问题

    我发现在对JS的学习中有很多朋友对this的指向问题还是有很大的误区或者说只是大致了解,但是一旦遇到复杂的情况就会因为this指向问题而引发各种bug. 对于之前学习过c或者是Java的朋友来说可能这 ...

  3. php回滚

    $m=D('YourModel');//或者是M();$m2=D('YouModel2');$m->startTrans();//在第一个模型里启用就可以了,或者第二个也行$result=$m- ...

  4. .NET入行之工作前

    时间就像轻风一样,刻意感受的时候几乎把你吹倒,不留意的时候又从你身边轻轻飘走了:长此以后,我怕自己会变得麻木,忘记了原来的样子.所以还是决定给自己留点什么,万一哪天忘记了,还可以再翻起来. 工作两年的 ...

  5. JAVA面试题和答案(二)

    本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Java和它的功能 ...

  6. Visual Studio 2015/2017 与ASP.NET CORE 联合创建具有SPA模式的Angular2模板

    虽然注册博客园很久,但是一直没有什么可写的,真心感觉好尴尬了,这次终于找到了一点可以写,有点小兴奋和小害羞呢. 进入主题,前端SPA模式越来越受到欢迎,Core 也开始被很多企业提上日程,但是因为这个 ...

  7. css重要属性之辩

    一.relative 1)与兄弟 relative对absolute 1.限制left/top/right/bottom定位 2.限制z-index层级: 3.限制在overflow下 relativ ...

  8. PMS5003ST+Arduino Nano 串口读取数据

    先上代码: 库文件是在guihub上的大神写的https://github.com/jbanaszczyk,我拿来小改下用以支持5003ST #include <Arduino.h> #i ...

  9. 解锁redis锁的正确姿势

    解锁redis锁的正确姿势 redis是php的好朋友,在php写业务过程中,有时候会使用到锁的概念,同时只能有一个人可以操作某个行为.这个时候我们就要用到锁.锁的方式有好几种,php不能在内存中用锁 ...

  10. ctrl+alt+F1~6进入不了字符界面,黑屏的解决办法

    ubuntu系统,我是ubuntu14.04 本来想装cuda,需要在字符界面下装,奈何按ctrl+alt+F1就黑屏了,按ctrl+alt+F7又可以正常回到图形界面,网上查了很多,有的方法也试过, ...