media-choice为媒体资源选择组件,基于KnockoutJs。支持图片、语音、视频、图文的选择以及预览,支持默认选择类型,支持是否禁用选择类型的更改。

使用示例:

<script id="media_idTemplate" type="text/html">

<media-choice-button params="value: media_id"></media-choice-button>

</script>

<script id="newsTemplate" type="text/html">

<media-choice-button params="value: media_id,mediaType:5,disabledChoice:true"></media-choice-button>

</script>

参数说明:

value:微信公众号媒体Id

mediaType:默认选择的媒体类型,其中(0:图片;1,语音;2,视频;5,图文)

disabledChoice:是否禁用选择

效果:

全部代码:

var instance = function (params, componentInfo) {
var self = this;
this.Name = ko.observable('请选择素材');
this.Url = ko.observable('/Content/patterns/congruent_pentagon.png');
this.Id = ko.observable('');
//默认选择的类型
this.MediaType = ko.observable('1');
//是否禁用选择框
this.DisabledChoice = ko.observable(false);
//订阅
self.MediaType.subscribe(function (newValue) {
console.debug(newValue);
self.Name('请选择素材');
self.Url('/Content/patterns/congruent_pentagon.png');
self.Id('');
});
this.ShowChoiceWindow = function (data) {
var type = self.MediaType();
var url = '';
switch (type) {
//图文
case "5":
url = '/Site_News?resourceType=5&lightLayout=1';
break;
//图片
case "0":
url = '/Site_Resources?resourceType=0&lightLayout=1';
break;
//语音
case "1":
url = '/Site_Resources?resourceType=1&lightLayout=1';
break;
//视频
case "2":
url = '/Site_Resources?resourceType=2&lightLayout=1';
break;
}
mwc.window.show('选择素材', url);
} if (params && typeof (params.value()) == 'string') {
params.value.subscribe(function (newValue) {
self.Id(newValue);
});
if (params.value().length > 0) {
self.Id(params.value());
mwc.restApi.get({
//请求地址
url: '/Site_Resources/GetJsonDataByMediaId/' + self.Id(),
//是否锁定UI
isBlockUI: true,
//可选,锁定元素
blockUI: componentInfo.element,
//成功函数
success: function (model) {
console.debug(model);
var data = model.FileBase;
if (data == null) {
return;
}
self.MediaType(model.ResourceType);
//一定要放后面,不然因为触发了订阅事件而导致相关数据被清空
self.Name(data.Name);
if (data.FrontCoverImageUrl)
self.Url(data.FrontCoverImageUrl);
else
self.Url(data.Url == null ? data.SiteUrl : data.Url);
self.Id(data.MediaId);
console.debug(ko.toJS(self));
}
});
}
if (params.mediaType) {
self.MediaType(params.mediaType);
}
if (params.disabledChoice) {
self.DisabledChoice(params.disabledChoice);
}
}
window.choice = function (data) {
params.value(data.MediaId);
self.Id(data.MediaId);
self.Name(data.Name);
if (data.FrontCoverImageUrl) {
self.Url(data.FrontCoverImageUrl);
} else
self.Url(data.Url == null ? data.SiteUrl : data.Url);
}
};
var newschoiceViewModelInstance = {
createViewModel: function (params, componentInfo) {
return new instance(params, componentInfo);
}
};
//资源选择
ko.components.register('media-choice-button', {
viewModel: newschoiceViewModelInstance,
template: '' +
'<div class="form-group">' +
'<label class="col-sm-2 control-label">类型:</label>' +
'<div class="col-sm-10">' +
'<select class="form-control" data-bind="value:MediaType,disable:DisabledChoice" data-val="true" data-val-required="类型 字段是必需的。">' +
'<option value="0">图片</option>' +
'<option value="1">语音</option>' +
'<option value="2">视频</option>' +
'<option value="5">图文</option>' +
'</select>' +
'</div>' +
'</div>' +
'<div class="form-group">' +
'<div class="col-sm-12">' +
'<div>' +
'<div class="panel panel-default" data-bind="click:ShowChoiceWindow">' +
'<div class="panel-body" id="content">' +
'<p data-bind="if:MediaType()==0">' +
'<img style="width:150px;height:100px" data-bind="attr:{src:Url}" />' +
'</p>' +
'<p data-bind="if:MediaType()==1 && Id()!=\'\'">' +
'<audio style="width:250px;height:100px" controls="controls" data-bind="attr:{src:Url}" />' +
'</p>' +
'<p data-bind="if:MediaType()==2 && Id()!=\'\'">' +
'<video style="height:100px !important;width:250px !important" controls="controls" data-bind="attr:{src:Url}" />' +
'</p>' +
'<p data-bind="if:MediaType()==5">' +
'<img style="width:150px;height:100px" data-bind="attr:{src:Url}" />' +
'</p>' +
'<div>' +
'<p data-bind="text:Name">' + '</p>' +
'</div>' +
'<!-- ko if:Id()==\"\" && "1,2".indexOf(MediaType())!=-1 -->' +
'<p>' +
'<a class="btn btn-primary btn-block m-t" data-bind="click:$root.ShowChoiceWindow">'
+ '<i class="fa fa-plus">' + '</i>选择素材</a>' +
'</p>' +
'<!-- /ko -->' +
'</div>' +
'</div>' +
'</div>' +
'</div>' +
'</div>'
});

Magicodes.WeiChat——媒体资源选择组件之media-choice(开源)的更多相关文章

  1. Magicodes.WeiChat——版本发布历史

    购买地址:https://item.taobao.com/item.htm?id=520205558575 您可以在新标签页打开此图,以查看原始图片. Magicodes.WeiChat为湖南心莱信息 ...

  2. Magicodes.WeiChat——自定义knockoutjs template、component实现微信自定义菜单

    本人一向比较喜欢折腾,玩了这么久的knockoutjs,总觉得不够劲,于是又开始准备折腾自己了. 最近在完善Magicodes.WeiChat微信开发框架时,发现之前做的自定义菜单这块太不给力了,而各 ...

  3. Magicodes.WeiChat——V3.0(多租户)版本发布

    主要内容如下: 添加项目Magicodes.WeiChat.Data.Multitenant,全面支持多租户(基于EF已经ASP.NET Identity) 增加租户管理.租户成员管理.修改密码.公众 ...

  4. Magicodes.WeiChat——ASP.NET Scaffolding生成增删改查、分页、搜索、删除确认、批量操作、批量删除等业务代码

    关于T4代码生成这块,我之前写过几篇帖子,如:<Magicodes.NET框架之路——让代码再飞一会(ASP.NET Scaffolding)>(http://www.cnblogs.co ...

  5. Magicodes.WeiChat——使用AntiXssAttribute阻止XSS(跨站脚本攻击)攻击

    跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web页面里插 ...

  6. Magicodes.WeiChat——后台JS框架封装

    Magicodes.WeiChat同时也致力于提高后台开发效率,因此对在后台前端这块也做了一定的封装.我们先来说说主要的框架JS——mwc.js和mwc_elements.js.这两个JS文件位于Sc ...

  7. Orchard官方文档翻译(九) 新增并管理媒体资源

    原文地址:http://docs.orchardproject.net/Documentation/Adding-and-managing-media-content 想要查看文档目录请用力点击这里 ...

  8. Magicodes.WeiChat——发送模板消息

    在微信开发中,经常会使用到模板消息.因此框架中对此进行了一些封装,并且提供了后台操作界面以及日志查看等功能,下面开始逐步介绍开发操作以及使用. 微信公众平台配置 首先,需要申请开通模板消息功能,如下图 ...

  9. vue仿京东省市区三级联动选择组件

    工作中需要一个盒京东购物车地址选择相似的一个省市区三级联动选择组件,google查了下都是下拉框形式的,于是自己写了一个,希望对使用vue开发项目的朋友有帮助,显示效果如下:使用vue2.0开发 ht ...

随机推荐

  1. CSS盒子模型学习记录3(侧面导航栏)

    学习http://www.blueidea.com/tech/web/2007/4545_2.asp 代码试验 html <!DOCTYPE html PUBLIC "-//W3C// ...

  2. apache相关

    http://hw1287789687.iteye.com/blog/2212292 http://enable-cors.org/server_apache.html http://blog.sin ...

  3. Windows程序设计(第五版)学习:第三章 窗口与消息

        第三章 窗口与消息 1,windows窗口过程:应用程序所创建的每一个窗口都有一个与之关联的窗口过程,用于处理传递给窗口的消息. 2,窗口依据窗口类来创建.窗口类标识了用于处理传递给窗口的消息 ...

  4. 命令行启动win7系统操作部分功能

    control.exe /name microsoft.folderoptions 启动资源管理器的 文件夹属性 选项卡 control.exe /name Microsoft.AddHardware ...

  5. 【软件工程】用map 实现把英语文本文件词和个数打印出来

    #include <iostream> #include <fstream> #include <string> #include <map> usin ...

  6. ElasticSearch 2 (10) - 在ElasticSearch之下(深入理解Shard和Lucene Index)

    摘要 从底层介绍ElasticSearch Shard的内部原理,以及回答为什么使用ElasticSearch有必要了解Lucene的内部工作方式? 了解ElasticSearch API的代价 构建 ...

  7. jdk1.6 反射性能对比

    ReflectPerformance.java package aaa.bbb.ccc; import java.lang.reflect.Method; public class ReflectPe ...

  8. smarty模板原理

    smarty模板原理   模板主要是用来让前端和后端分离的,前台页面只是一个前台页面,后台页面用php代码写逻辑,写完逻辑拿到前台显示. 一.写法 一般需要以下:写3个页面: 1.显示页面aa.htm ...

  9. (十) 一起学 Unix 环境高级编程 (APUE) 之 线程控制

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  10. MCS-51系列特殊功能寄存器(摘录)

    MCS-51系列特殊功能寄存器(80H~FFH) 1. P0 (80H) P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 2.SP 栈指针(81H) 3.DPTR 数据 ...